JAVA PROGRAMLAMA DILI 00001.JPG Dr. M. Turhan Çoban Nebraska Üniversitesi - Lincoln Makina Mühendisligi bölümü N106 Walter Scott Engineering Center PO Box 880656 Lincoln, NE 68588-0656, U.S.A. email : [email protected] [email protected] [email protected] web site: www.cgimarket.com/~turhan/Java ÖNSÖZ...................................................................................................................................................................6 BÖLÜM 1 : JAVAYA GIRIS...............................................................................................................................8 1.1 NIÇIN JAVA PROGRAMLAMA DILI......................................................................................................8 1.2 JAVA PROGRAMINI YAZMA VE ÇALISTIRMA...................................................................................9 1.3 JAVA PROGRAMLAMA DILI TEMEL DEGISKEN TÜRLERI............................................................20 1.3.1 Boolean degisken türü........................................................................................................................20 1.3.2 char (harf) degisken türü.....................................................................................................................20 1.3.3 Tam sayi degisken türleri (byte, short,int,long)..................................................................................21 1.3.4 Gerçek sayi degisken türleri (float, double,long double)....................................................................22 1.4 JAVA NESNESI OLARAK TANIMLANMIS TEMEL DEGISKENLER...............................................22 1.4.1 String nesne tipi degiskeni..................................................................................................................22 1.4.2 Integer nesne tipi degiskeni................................................................................................................23 1.4.3 Double nesne tipi degiskeni................................................................................................................23 1.4.4 diger nesne temelli degisken türleri....................................................................................................24 1.5 FINAL TERIMI VE SABITLER...............................................................................................................24 1.6 ARITMETIK ISLEMLER..........................................................................................................................24 1.7 JAVADA MANTIKSAL ISLEMLER.......................................................................................................27 1.8 JAVA DILININ TEMEL KOMUTLARI...................................................................................................29 1.8.1 if - elseif - else mantiksal karsilastirma yapisi....................................................................................29 1.8.2 while tekrarlama yapisi.......................................................................................................................32 1.8.3 for tekrarlama yapisi...........................................................................................................................33 1.8.4 switch - case yapisi.............................................................................................................................35 1.9 ARITMETIK ISLEMLERDE DEGISKEN TÜRÜ DEGISTIRME (CASTING) OPERASYONU..........39 1.10 SAYI DEGIL VE SONSUZ SONUÇLARI.............................................................................................39 1.11 ALISTIRMALAR....................................................................................................................................39 BÖLÜM 2 : METODLAR VE OBJECT KULLANIMI..................................................................................79 2.1 JAVA API KÜTÜPHANESI......................................................................................................................79 2.2 METOTLAR..............................................................................................................................................82 2.3 NESNE (OBJECT) TANIMI VE METOTLARDA KULLANIMI...........................................................84 2.4 METOTLARIN KENDI KENDINI ÇAGIRMASI (RECURSION)..........................................................86 2.5 AYNI ADLI METOTLARIN BIR ARADA KULLANILMASI (OVERLOADING)..............................89 2.6 METOT (METHOD) VE SINIF(CLASS) DEGISKENLERI...................................................................91 2.7 ALISTIRMALAR......................................................................................................................................94 BÖLÜM 3 . SINIF (CLASS) YAPILARINA GIRIS......................................................................................124 3.0 STANDART KAVRAMLARIN TÜRKÇE KARSILIKLARI................................................................124 3.1 SINIF YAPISININ GENEL TANIMI......................................................................................................124 3.2 KURUCU ( CONSTRUCTOR ) METOT................................................................................................126 3.3 DIGER METOTLAR...............................................................................................................................127 3.4 THIS DEYIMININ KULLANIMI...........................................................................................................129 3.5 SINIF DEGISKENLERININ DIS DÜNYADAN GIZLENMESI...........................................................129 3.6 SINIFLARDA KALITIM (INHERITANCE)..........................................................................................133 3.7 SINIFLARI BASKA BIR SINIFTA NESNE OLARAK ÇAGIRARAK BiR ARAYA GETiRME (COMPOSITION)..........................................................................................................................................135 3.8 KALITIM YOLUYLA ALT SINIFA BAGLANMIS ÜST SINIF REFERANSI ÜZERINDEN ALT SINIFI ÇAGIRMA.........................................................................................................................................136 3.9 NESNEYi DiNAMiK OLARAK SiLMEK FINALIZE() METOTU.......................................................137 3.10 ALISTIRMALAR..................................................................................................................................137 BÖLÜM 4 : BOYUTLU DEGISKENLER VE NESNELER (ARRAYS).....................................................202 4.1 TEK BOYUTLU DEGiSKENLER..........................................................................................................202 4.2 TEK BOYUTLU NESNE TiPi DEGiSKENLER....................................................................................206 4.3 ÇOK BOYUTLU DEGISKENLER.........................................................................................................206 4.4 BOYUTLU DEGISKENLERIN METOTLARA AKTARIMI................................................................210 4.5 BOYUTLU DEGISKENLERDE BOYUT DEGISTIRME......................................................................210 4.6 ALISTIRMALAR....................................................................................................................................213 BÖLÜM 5 : SINIFLARDA HIYERARSI, ABSTRACT SINIF VE INTERFACE.....................................227 5.1 ABSTRACT SINIF..................................................................................................................................227 5.2 INTERFACE............................................................................................................................................231 5.3 ALISTIRMALAR....................................................................................................................................235 BÖLÜM 6 : GRAFIKLER, FONTLAR VE RENKLER...............................................................................244 6.1 GIRIS.......................................................................................................................................................244 6.2 GRAPHICS VE GRAPHICS2D SINIFLARI..........................................................................................244 6.3 RENK KONTROLÜ................................................................................................................................247 6.4 YAZI KONTROLU..................................................................................................................................253 6.5 ÇiZGi ÇiZiMi...........................................................................................................................................257 6.6 DiKDÖRTGEN ÇIZiMi...........................................................................................................................260 6.7 ÇIZILEN SEKILLERIN DEGISTIRILEREK ÇIZIMI (TRANSFORM)................................................265 6.8 OVAL VE AÇILI OVAL ÇIZIMI...........................................................................................................267 6.9 ÇIZIMIN SEÇILEN BIR RESIMLE DOLDURULMASI.......................................................................270 6.10 POLYGON ÇIZIMI...............................................................................................................................273 6.11 GENELLESTIRILMIS EGRI ÇIZIMI...................................................................................................276 6.12 RESIM GÖSTERIMI.............................................................................................................................280 6.13 ALISTIRMALAR..................................................................................................................................281 BÖLÜM 7: GRAFIK APPLET VE ÇERÇEVE OLUSTURMA OLUSTURMA METOTLARI, GRAFIK KULLANICISI ARABIRIM PROGRAMLARI (GUI) ,...............................................................................308 7.1 GRAPHIC KULLANICISI ARABIRIM PROGRAMLARI, GUI, (GRAPHICS USER INTERFACE) 308 7.2 AWT LABEL (ETIKET) SINIFI , JAVAX JLABEL VE ICON SINIFLARI.........................................309 7.3 BUTTON VE JBUTTON (DÜGME) SINIFLARI.................................................................................315 7.4 TEXTFIELD (YAZIM ALANI) SINIFI..................................................................................................322 7.5 YAZIM ALANI AWT TEXTAREA VE SWING JTEXTAREA SINIFLARI......................................326 7.6 AWT CHOICE , SWING JCOMBOBOX SEÇIM SINIFLARI.............................................................329 7.7 AWT, CHECKBOX VE CHECKBOXGROUP VE SWING JCHECKBOX VE JRADIOBUTTON SINIFLARI.....................................................................................................................................................332 7.8 MOUSE(FARE) KONTROLU................................................................................................................339 7.10 AWT, LIST SINIFI VE JAVA SWING JLIST SINIFI , LISTEDEN SEÇIM.......................................345 7.11 SWING JMENU.....................................................................................................................................355 7.12 SWING JSLIDER SINIFI VE JPANEL TEMEL ÇIZIM ELEMANI (PANELI)..................................359 7.13 FLOWLAYOUT SINIFI KULLANARAK GUI FORMATLANMASI................................................362 7.14 BORDERLAYOUT SINIFI KULLANARAK GUI FORMATLANMASI...........................................364 7.15 GRIDLAYOUT SINIFI KULLANARAK GUI FORMATLANMASI.................................................366 7.17 JSPLITPANE SINIFI KULLANILARAK FORMATLAMA................................................................369 7.19 PANEL VE JPANEL SINIFI.................................................................................................................371 7.20 JOPTIONPANE SINIFI.........................................................................................................................376 7.22 JFILECHOOSER SINIFI.......................................................................................................................379 7.23 JAVA JAR (JAVA ARCHIVES - JAVA ARSIVI) YAPILARININ KULLANIMI.............................381 7.24 ALISTIRMALAR..................................................................................................................................382 8. JAVADA HATA ANALIZI VE YAKALANMASI..............................................................................472 8.1 HATA ANALIZI......................................................................................................................................472 8.2 ALISTIRMALAR....................................................................................................................................476 9. PARALEL KULLANIM (MULTITHREADING) , GERÇEK ZAMAN UYGULAMALARI, ANIMASYON....................................................................................................................................................486 9.1 PARALEL KULLANIM(MULTITHREADING) VE GERÇEK ZAMAN PROGRAMLANMASI.....486 9.2 PARALEL PROGRAM KULLANIMIDA HAFIZA SINKRONIZASYONU........................................491 9.3 ALISTIRMALAR....................................................................................................................................499 BÖLÜM 10 JAVA GIRDI - ÇIKTI PROGRAMLANMASI......................................................................528 10.1 JAVANIN I/O (GIRDI ÇIKTI ) KÜTÜPHANESINDE YER ALAN SINIFLAR VE INTERFACE’LER ........................................................................................................................................................................528 10.2 FILE (DOSYA) SINIFI..........................................................................................................................530 10.3 ARDISIK (SEQUENTIAL) DOSYA YARATILMASI........................................................................532 10.4 RASLANTISAL ULASIM DOSYASI OKU (RANDOM ACCESS FILE)..........................................555 10.5 DOSYA SIKISTIRILMASI (GZIP,GUNZIP,ZIP,UNZIP)....................................................................563 10.6 ALISTIRMALAR..................................................................................................................................571 BÖLÜM 11 GELISMIS JAVA BILGI ISLEME YAPILARI.......................................................................644 11.1 STRINGTOKENIZER SINIFI...............................................................................................................644 11.2 STRING BUFFER SINIFI.....................................................................................................................648 11.3 VECTOR SINIFI....................................................................................................................................650 11.4 LIST(LISTE) SINIFI..............................................................................................................................660 11.5 DIZI (STACK) SINIFI...........................................................................................................................667 11.6 SIRA (QUEUE) SINIFI..........................................................................................................................670 11.7 TREE(AGAÇ) SINIFI............................................................................................................................672 11.8 DICTIONARY ve HASHTABLE SINIFLARI.....................................................................................675 11.9 ARRAYS SINIFI VE SIRALAMA........................................................................................................677 11.10 ALISTIRMALAR................................................................................................................................678 BÖLÜM 12 ÖRNEKLERLE SAYISAL ANALIZ.........................................................................................695 12.1 SAYISAL ANALIZE GIRIS.................................................................................................................695 12.2 MATRIX SINIFI....................................................................................................................................695 12.3 MATRIX SINIFI ÖRNEK PROGRAMLARI.......................................................................................725 12.4 NUMERIC SINIFI (SAYISAL ANALIZ PAKETI) ÖRNEK PROBLEMLERI.................................753 12.5 ALISTIRMALAR..................................................................................................................................777 BÖLÜM 13 DATABASE (VERI TABANI) PROGRAMLAMASINA GIRIS............................................778 13.1 TEMEL KAVRAMLAR........................................................................................................................778 13.2 JAVA VE SQL BAGLANTISI..............................................................................................................781 13.3 ALISTIRMALAR..................................................................................................................................789 BÖLÜM 14 JAVA ANADIL (NATIVE LANGUAGE) PROGRAMLAMASINA GIRIS.........................815 C++ ve C PROGRAMLAMA DILLERININ JAVA ILE BIRLIKTE KULLANIMI.................................815 14.1 TEMEL KAVRAMLAR........................................................................................................................815 14.2 DEGISKENLERIN VE JAVA NESLERININ AKTARILMASI..........................................................816 BÖLÜM 15 JAVA BEANS (JAVA FASULYELERI) PROGRAMLAMA.................................................827 15.1 TEMEL KAVRAMLAR........................................................................................................................827 15.2 ALISTIRMALAR..................................................................................................................................843 16. NETWORK PROGRAMLAMAYA GIRIS.............................................................................................847 16.1 TCP/IP PROTOKOLÜ...........................................................................................................................847 16.2 ALT SEVIYE ILETISIM : UDP KULLANIMI.....................................................................................848 16.3 TCP BILGI ILETIMI, SOCKET SINIFI...............................................................................................850 16.4 INTERNET SITELERIYLE BILGI ALISVERISI, URL SINIFI..........................................................853 17. GÜVENLIK.................................................................................................................................................860 17.1 APPLETLERDE GÜVENLIK...............................................................................................................860 17.2 KONSOL PROGRAMLARINDA GÜVENLIK....................................................................................866 17.3 GÜVENLIK SERTIFIKALARI.............................................................................................................868 17.4 JAR DOSYALARININ GÜVENLIK KODUYLA IMZALANMASI...................................................869 17.5 BROWSERLARDA GÜVENLIK..........................................................................................................869 EK A TEXT SINIFI..........................................................................................................................................871 EK B JAVA DERSI SINAV SORULARI.......................................................................................................876 JAVA PROGRAMLAMA DILI GEBZE YÜKSEK TEKNOLOJI ENSTITÜSÜ GÜZ DÖNEMI 2000 BITIRME SINAVI SORULARI....................................................................................................................876 JAVA PROGRAMLAMA DILI GEBZE YÜKSEK TEKNOLOJI ENSTITÜSÜ 20 OCAK 2000 BITIRME SINAVI SORULARI......................................................................................................................................885 18 REFERANS LISTESI..................................................................................................................................898 ÖNSÖZ Bilgisayar programlamasi günümüz teknolojisinin önemli bir ögesidir. Benim için bu yolculuk 1975 de aldigim ilk Fortran IV programlama dili kurduyla basladi diyebilirim. O dönemde genelde teorik bazda gördügümüz programlama dersinde yaptigimiz tek gerçek program örnegi kartlara delerek verdigimiz ve sonuçlari ertesi gün aldigimiz ikinci dereceden denklemin köklerini hesaplar bir programdi.Kullandigimiz ege üniversitesi bilgisayar merkezindeki IBM tabanli bir "mainframe" bilgisayardi. 1978 yilinin sonlarinda Unix tabanli siyah beyaz monitörler veya kagit yazicili monitorler araciligiyla çalisan IBM makinalarla çalismaya basladim. Tabii yil geregi Fortran 77 versiyonuna ulasmisti. 1982 yilinda Digital VAX bilgisayarlarinda programlamaya ve ayni zamanda sistem görevlisi olarak çalismaya basladim. Bu bilgisayarlar virtual (sanal) hafiza özellikleriyle çok büyük programlarin kullanilmasina izin veriyorlardi. Dil olarakta Fortranin yaninda Pascal da vardi. Üç boyutlu çizim ortami için özel olarak gerlistirilms evans-sutherland bilgisayari ile de bu dönemde tanisma firsatim oldu. Bu arada Commodore 64 bilgisayarlari piyasaya çikmisti. Evimde kullandigim bu küçük aletle asembler ve basic dillerini kullanarak birçok program gelistirdim. hatta assembler da yazilmis türkçe bir kelime islem programi bile vardi. 80 li yillarin sonu ve 90 li yillarin basinda Pc ler, dos ortami ve diliyle tanistim. sonra PC ortami Machintosh ve Amigadan çok sonra grafik programlama ortamini büyük bir bulus olarak ortaya atti ve Windows sistemlerini çikardi. Ve ikinci bilgisayarimi param oldukça aldigim parçalari birlestirerek kendim olusturdum. Bu bir 80386 Pc bilgisayari idi. Artik genelde c dilini kulaniyordum. C++ dilini gerçek anlamda kullanmaya baslamam, bilgisayar konusundaki lisans üstü kursunu alirken oldu. Bundan sonraki tüm programlama uygulamalarimda nesne kökenli olan bu dili kullanir oldum. Ayni kursta Lisp, Parallaxis gibi degisik dillerle de çalismistim. Bu arada evde de yine PC tabanli Pentium 100 bilgisayarina terfi ettik. Bana Java dilini esimin aldigi lisans üstü kursundaki Java kursu gösterdi. Java dili yeni çikmis, fakat yeni olmasina ragmen okullardaki bilgisayar bölümleri egitimde hizla bu dile yönelmislerdi. Bu dile baslar baslamaz da çok sevdim. Her sey tüm diger dillere göre çok daha iyi düsünülmüs ve planlanmisti. Orijinal olarak C++ da yazilmis bir çok kodu fazla bir gayrete gerek duymadan java koduna çevirerek is ortamimda kullanmaya basladim. 1998 yilinda Dokuz eylül üniversitesinde mühendislik bilimleri fakultesinde ögretim üyeleri ve master ve doktora ögrencileri için "Java programlamlama dili" dersi açtim. Bu kitabin temelini bu ders için hazirladigim ders notlari olusturmustur. 1999 yilinda Gebze ileri teknoloji Enstitüsünde ayni dersi yinelerken ders notlari ilave problemlerle de zenginleserek biraz daha kitap halini aldi. Son bir gözden geçirmeden sonra elinizdeki haline geldi. Java dili yapisi, kullanim olasiliklari ve kolay kullanimi, zengin kütüphaneleriyle gelecegin dili olacagina programcilarin çogunun inandigi bir dildir. C++ su an itibariyle çok daha fazla kullanilan bir dil olam özelligini sürdürmektedir, fakat C++ hatalara izin veren yapisiyla baslangiç seviyesi programcilara hitap eden bir dil degildir. Rahatlikla hata yapabilirsiniz, ve yaptiginiz bu hatalar rahatlikla gözden kaçabilir. Hemen sunu ilave edeyim, java daha yeni emeklemeye baslamis bir bebektir, ama gelecek on yil içinde çok iyi bir konuma yerlesmenin isaretlerini simdiden vermektedir. Türkiyede de programcilik henüz yeni yeni olusmaya baslayan bir dal. Hem programci kapasitesi, hem de isteklere cevap vermek için yeterli boyutta degil henüz.Programlama teknolojisinde iyi bir boyuta gelebilmek paket kullanimindan degil programlamadan geçmektedir. Bu yüzden bu kitap eger yeni programlamacilarimiza bir seyler verebilir ve onlarin gelecekte daha iyi bir noktada olabilmelerini saglayabilirse ben emegimin karsiligini almis olurum. Yeni baslayanlara bir tavsiye bilgisayar dillerini ögrenme biraz insan dillerini ögrenmeye benzer. Temel mantigini kapana kadar biraz zorlanabilirsiniz. Sakin ümitsizlige kapilip birakmayin. Bir kere temel mantigini anladiktan sonra ne kadar kolay oldugunu göreceksiniz. Iyi çalismalar. Dr. Turhan Çoban TÜBITAK, MAM 21 Mart 2000, 21.36 [email protected] IKINCI BASKININ ÖNSÖZÜ Bu Java kitabinin birinci baskisi umdugumun çok üstünde ilgi gördü. Saniyorum bunun temel sebebi türkçe kaynak eksikliginin oldukça fazla olmasi. Bu ilgi üzerine kendimi biraz daha ciddi bir çalistirma olusturmak için sizlere borçlu hissettim. Umuyorum bu ikinci baski çok daha fazla isinize yarayacak ve sadece bir ders notu olmanin disinda biraz daha bir referans kitabina yaklasacak bir eser olacak. Kitabin ilk baskisinda okuyuculardan oldukça yogun mektuplar aldim, bu mektuplarda begenilerinin yani sira benim de hakli buldugum elestiriler de yer aliyordu. Gelen elestirilerden en yogunu kitabiniçindeki kodlarin bir CD olarak sunulmamis olmasiydi. Bu ikinci baskida bunu saglayabilmek için elimden geleni yapacagim, fakat basarili olamazsam kodlari www.geocities.com/turhan_coban/ adresi üzerinden yayinlamaya çalisacagim. Ikinci elestiri Text sinifini bulamamak veya çalistiramamak idi. Text sinifini ben özellikle eklerde de vermistim. Bu sinifin amaci javanin çok yogun kullandigi hata analizini asarak en azindan baslangiçta okuyuculara (ögrenicilere?) kolaylik saglamakti. Derslerde ögrenciler için bu kolayligi sagladi da, fakat sanirim kitapta kodlarin verilmeyisiyle birlikte kolaylik yerine zorluk getirdi. Bu ikinci baskida birinci bölümden itibaren girdi çiktida birden fazla alternatif bulacaksiniz. Bunlarin birisi de swing sinifindan olan JoptionPane sinifi, kullanilmasi gayet basit olan pencere tipi bir girdi çikti sinifi.Swing sinifini bu baskida bir öncekine göre oldukça yogun kullandim. Bazi programlarinda aradaki benzerlik ve farklari görebilmeniz amaciyla swing ve awt versiyonlarini arka arkaya koydum. Swing awt’ye göre çok daha kompleks bir yapi, yalniz olasiliklari arttirdigi için java dünyasina simdiden tamamen hakim olmus durumda. Bu baskida ilk baskida olmayan java güvenlik ve java anadil programlama bölümlerini bulacaksiniz. Ayrica daha öce ayri bir bölüm olarak verdigimiz swing ve 2D grafik programlama bölümünü de ilgili konulara yayarak kaldirdim. Bence ilk baskiya göre elinizde daha kullanisli bir kitap var. Elbette mükemmel degil, ama ilk baskinin en azindan dört kati bir emegin sonucu. Umarim sizlere java ögrenme yolunda bir ilk adim olarak faydali olur. Bu yeni baskiyi gelistirmemde büyük paylari olan Gebze Yüksek Teknoloji Üniversitesi, java dersi ögrencilerine, ayrica bana iyi bir egitim vermek için ellerinden gelen çabayi harcayan babam Osman ve annem Hatice’ye, Kardeslerim Birsen, Nurhan ve Irfan’a ve bu kitabin yazilmasi sirasinda verdigi destek için esim Meral’e tesekkürlerimi bildirmek isterim. Dr. Turhan Çoban TÜBITAK, MAM 11 Mart 2001, 23.34 [email protected] BÖLÜM 1 : JAVAYA GIRIS 1.1 NIÇIN JAVA PROGRAMLAMA DILI Java Programlama dili su anda dünyadaki en popüler programlama dillerinden biri haline gelmistir. Java SUN bilgisayar sirketince orijinal olarak elektrikli ev araçlarinin (mikrodalga firinlari, buzdolaplari , televizyonlar, uzaktan kumanda cihazlari vs.) birbiriyle haberlesmesini saglamayi amaçlayan bir proje içerisinde 1991 yilinda gelistirilmeye baslandi. Orijinal adi bu dilin yaraticilari James Gosling, Patrick Naughton, Chis Wartdh, Ed Frank ve Mike Sheridan tarafindan Oak olarak konulan programlama dili daha sonra bu isimde baska bir programlama dili oldugu kesfedilince o anda bir kahvehanede kahve içen programlama gurubu tarafindan kahve markasindan esinlenerek Java olarak degistirildi. Akilli elektronik ev araçlari pazari SUN gurubunun tahminlerinden çok daha yavas bir gelisme gösteriyordu. Bu yüzden Java dili projesi ticari bir gelistirme projesi olarak büyük olasilikla iptal edilecekti. 1993 Yilinda "World Wide Web" büyük bir atilim göstererek bütün dünyaya yayilmaya basladi. Javanin Dinamik Web sayfalari hazirlamadaki büyük potansiyelini gören SUN sirketi projeyi bu tarafa yönlendirdi ve bu javaya yeni bir canlilik ve yasama umudu sagladi. Mayis 1995 de SUN javayi büyük bir konferansta tanitti. Program is dünyasi tarafindan derhal büyük bir ilgiyle karsilandi. Java Modern bilgisayar dünyasinin ses, grafik islem, haberlesme gibi ihtiyaçlarina cevap verebilen ve Ticari gayeler için hazirlanan bir Program dili olarak daha önceki bilgisayar dillerinin hiç birinin kapsayamadigi özellikleri içermekteydi. Bunun yani sira dil komut yapisi olarak C++ diline çok yakin olmasi da ögrenilmesini kolaylastiriyordu. SUN Javayi "World Wide Web" de kullanmak isteyen herkese ücretsiz olarak sundu. Java internette yayinlanmasinin ardindan çok büyük bir patlama yasadi. 1997 ye gelindiginde dünyadaki bütün bilgisayar okullarinda temel bilgisayar dili olarak gösterilmeye baslandi. Dünyada su anda hala en çok kullanilan bilgisayar dili olan C++ dilinin yapilan hatalari tam olarak denetlememesi programin çalisma hizini arttirma yönünden iyi bir özellik olsa da profesyonel programcilar disinda kullanilmasini sinirlandirici bir etki yapiyordu. Java ise bütün hatalari bildiren yapisi ve modern bilgisayarin bütün fonksiyonlarina ulasabilen kütüphaneleriyle programcilarin çok daha kolaylikla ögrenebilecegi bir dildir. Burada hemen sunu da belirtelim. C dili hizli çalisma amaci birinci planda tutularak yaratilmis bir dildir. Javada ise emniyet ilk planda yer almistir. Hiz açisindan düsünüldügünde java C (ve C++) diliyle rekabet edemez. zaten program derleyicisi de C++ dilinde yazilmistir. Javanin diger önemli bir temel özelligi Nesne kökenli (object oriented) bir dil olmasidir. Nesne kökenli diller, nesneleri gerçek dünyadakine daha benzer bir yapida tanimlayarak anlasilmalarini kolaylastirirlar. Nesneleri gerçek dünyadaki gibi masa, sandalye, bilgisayar, gerçek gaz, isi esanjörü gibi tanimlayarak programlamak insan beyninin anlamasi açisindan çok daha kolaydir. Bundan önceki tam nesnel kökenli programlama dillerinden hiçbiri çok yayginlik kazanmamisti. Bu tür dillere Smalltalk,u Örnek verebiliriz. C++ nesnel kökenli programlama yapabilen bir dildir. Fakat yapisal (structural) birprogramlama dili olan C dilinin bir uzantisi olarak gelistirildiginden tam anlamiyla nesnel kökenli bir dil oldugu söylenemez. Java dilini gelecegin dili yapan diger bir özelligi de çok kullanimli (multi-tasking) ve paralel kullanimli(multi- treading) bir dil olmasidir. Çok kullanimlilik birden fazla islemin ayni anda yapilabilmesinin tanimidir. Paralel kullanimlilik ise birden fazla programin ayni anda hafizayi beraber kullanarak kullanilabilmesidir. Örnek olarak World ve Excel programlarinin Windows NT ortaminda ayni anda kullanilmasidir. ADA gibi bazi eski Program dillerinde çok kullanimlilik programlanabiliyordu. Paralel kullanim olanaklarini sunan ilk bilgisayar dili ise javadir. Paralel kullanim paralel programlama kavramindan ayridir ve karistirilmamalidir. Paralel programlanmada birden fazla Bilgi islem Ünitesine (CPU ) ayri programlar veya bir programin ayri parçalari gönderilir. Paralel kullanimda ise bir CPU nun kullanim zamani küçük parçalara ayrilarak degisik Program veya Program parçaciklari bu zaman paketçiklerini paylasarak kullanirlar. Javayi önemli bir Program dili haline getiren en önemli özelligi ise kullanilan bilgisayardan bagimsiz olmasidir. Javada yazilan bir Program Unix, Machintosh, Windows 95 veya Windows NT veya herhangi bir 32 bit makinada hiç degistirilmeden kullanilabilir. Java programlarinin grafikleri "Wold Wide Web" sayfalarinin programlama dili olan html (hypertext markup language) ile aktarilir. Bu yüzden html ve java programlarini birlikte kullanmak ve java programlarini gerçek zamanda www sayfalarinda göstermek mümkündür. Kendi web sayfanizi veya webde yazilmis kitabinizi bütün dünyaya aktarirken yaptiginiz analizleri de bu kitabin dinamik bir parçasi olarak sunabilirsiniz. Bu Türkiye gibi ülkelerin dünyaya kapilarini daha kolay açmalari açisindan oldukça önemli bir özelliktir. Javanin HTML diliyle kullanilabilmesi, bazi kisilerde htmlin bir parçasi oldugu gibi bir kavram gelismesine yol açmistir. Programlamaya yeni baslayanlar sik sik html ile javayi birbirine karistirirlar. veya javanin HTML'nin bir uzantisi oldugunu düsünürler. Bu temelde oldukça yanlis bir varsayimdir. HTML internet belgelerini birbirine baglamak amaciyla gelistirilmis bir belge islem sistemidir ve bir programlama dili degildir. HTML ile javanin tek gerçek ilgisi HTML deki applet komutudur. bu komut yardimiyla java dilinde yazilmis programlarin sonuçlari HTML ortamina dinamik olarak aktarilabilir. 1.2 JAVA PROGRAMINI YAZMA VE ÇALISTIRMA Her programda oldugu gibi java programlarinda da ilk evre programi yazmaktir. Java programlari her editör programiyla yazilabilirler. Örnegin Unix sistemlerinde vi veya emacs,windows 95 ve windows NT de DOS Edit, veya Windows Notedefteri (notepad) veya WordPad programlari kullanilabilir. Bildiginiz ve kullanmakta rahat oldugunuz herhangi bir editör programi varsa rahatlikla kullanabilirsiniz. Windows Notedefteri (notepad) editörüyle ilgili karsilasacabileceginiz bir programi burada hemen belirtmekte yarar var. Bu program tüm dosyalarin arkasini txt eki getirmeye çalisir. Programi direk içinde yazip çalistirabilen Microsoft Visual J++, Symantec Visual Café, Jpad, Borland JBuilder gibi Java gelistirme paketleri de mevcuttur. Bu kitapta bu paketler yardimiyla program yapilmasina direk olarak hiç deginilmemistir. Kisisel olarak bu tür paketler java dilini ögrenme açisindan bilhassa yeni programlama ögrenenlere çok fazla yardimi olacagini sanmiyorum, üstelik sadece o paketi kullanmayai ögreneceginiz için bir tür bagimliliga sebep olabilirler. Fakat bu paketler uzman hale geldikten sonra isinizi kolaylastirmak açisindan çok yararli olabilir. Süphesiz programi yazmadan önce Java compilerinin bir kopyasini edinmeniz de gerekir. Java gelistirme seti (Java Developers kit - JDK) SUN bilgisayar sirketinin http://www.java.sun.com veya http://www.javasoft.com internet adreslerinden bedava çekilebilir. Çekme zahmeti istemiyorsaniz SUN bu programlari CD formatinda da satmaktadir. Sun programin kitaplar ve üçüncü el kaynaklarda verilmesine müsade etmemektedir. Ayrica derleyici sürekli olarak yenilendiginden orijinal kaynagindan her zaman en yeni versiyonunu elde edebilirsiniz. Java ile yaptiginiz lisans anlasmasina göre program dilini bedava olarak kullanabilirsiniz, ancak satacaginiz profesyonel bir program gelistirdiginizde sun sirketine kazanciniz üzerinden belirli bir yüzde ödemeniz gerekecektir. Java programi isim.java seklinde editörle yazilir. Java programiniz yazildiktan sonra ilk step java derleyici (compiler) programiyla isim.class ara bilgisayar kodunu olusturmaktir. Java programini yazarken dikkat etmeniz gereken diger bir özellik de javanin nesne sinifinin ismiyle dosyadaki isminin ayni olmasidir. Bilgisayar konsol ekraninda (DOS veya UNIX Console) javac isim.java Komutunu bilgisayara gönderdiginizde programinizda hata yoksa java derleyicisi isim.class dosyasini yaratir. Eger programinizda hata varsa hatalarin listesini verir. Programlamanin dili ingilizce oldugundan bu hata açiklamalari da ingilizcedir. Editör programina geri dönüp hatalari düzeltmeniz, programi tekrar kaydetmeniz ve sonra bu komutu tekrar denemeniz gerekecektir. Java programlari iki ortam için yaratilabilir. Birincisi Konsol ortamidir (DOS, Unix console gibi). Konsol ortamini kullanirken java dilinin konsol komutu java kullanilarak isim.class dosyasi yerel bilgisayarin makine diline program çalisirken dönüstürülür. Bu temelde bir tercüme (interpretation) islemidir. Sonuç olarak java dilinde iki kademeli bir proses kullanilir, birinci islemde java dosyasi class dosyasina çevirilir (derlenir), ikinci islemde ise class dosyasi yerel bilgisayarin makine diline dönüstürülür. konsol ortaminda çalistirilan program sonuçlari yine konsol ortaminda alinacagi gibi pop-up pencere grafik ortaminda da alinabilir. Ikincisi ise internet browser penceresi (Applet) ortamidir. Eger Program konsol ortaminda yazilmissa java isim komutu kullanilarak sonuçlar ekranda veya açilan bir pencerede görülebilir. Eger Program applet ortaminda yazilmissa java programina ilave olarak html dilinde isim.html dosyasi açilir. En basit sekilde html dosyasi su sekilde tanimlanabilir : <html > <applet code="isim.class" width=200 height=50 > </applet > </html> Buradaki width pencerenin enini pixel olarak, height’da yüksekligini yine pixel(görüntü noktasi) olarak vermektedir. daha sonra bu dosya konsoldan appletviewer isim.html komutuyla çalistirilabilir. Buradaki appletviewer komutu java program paketindeki basitlestirilmis bir browser programidir. Bu komut yerine isim.html dosyasi herhangi bir browser programina yüklenerek görülebilir. Burada hemen sunu not etmeliyiz: braowser program yazicilari genelde java versiyonlarini kendi programlarina aktarmakta biraz yavas kalmaktadirlar bu yüzden en yeni java derleyicisiyle derlediginiz bir programi browser’iniz göstermeyebilir. Buna karsilik java “plug-in” denilen küçük programlar gelistirmistir. Diger bir olasilikta elbette eski java derleyicinizi hemen atmayip bir süre daha (yeni versiyonu browser programlari tarafindan tam olarak taninincaya kadar) profesyonel applet programlari gelistirirken kullanmanizdir. Programcilikta adeta adet haline gelen ilk uygulama daima o dilde ekrana Hosgeldiniz çiktisi almaktir. Bizde bu kuralin disina çikmayalim. Asagidaki listede ilk konsol programimiz Hosgeldiniz.java görülmektedir. Program 1.1 Hosgeldiniz.java konsol programi import java.io.*; //java girdi cikti sinifini cagir class Hosgeldiniz { public static void main(String args[]) { System.out.println("Java Sinifina Hos Geldiniz!"); } } bu programi çalistirmak için javac Hosgeldiniz.java java Hosgeldiniz komutlarini konsolda vermemiz yeterlidir konsol çiktisi olarak: Java Sinifina Hos Geldiniz! Yazisini aliriz. Simdi bu programdaki satirlara tek göz atalim. import java.io.*; Bu deyim java konsol girdi çikti kütüphanesindeki metotlari programimiza aktarir. //java girdi cikti sinifini cagir // isaretiyle baslayan yazilar bilgisayar tarafindan kullanilamaz sadece programi okuyani bilgilendirmek amaci tasir /* ..... */ isaretleriyle de verilebilir. Örnegin : /* Bu kisimda yazilanlarla bilgisayar ilgilenmez Sadece insanlarin programi anlamasi içindir */ class Hosgeldiniz Class (sinif) nesne kökenli programlama yapisinin temel tasidir. Her Class'in kendine özgü bir ismi olmasi gerekir. Daha önce yazilmis Class'lar import deyimiyle programa çagirilabilirler. Yeniden