JAVA  


PROGRAMLAMA DİLİ  

Dr. M. Turhan Çoban
University of Nebraska-Lincoln
N 106 Walter Scott Engineering Center
PO Box 880656
Lincoln NE, USA
email MCOBAN2@netscape.net
MCOBAN2@unl.edu
icq 14592305



 
 

Copyright : Turhan Çoban ; Bu kıtaptaki malzemeleri baska bır yerde yazarın izni olmadan ve bu kitap referans gösterilmeden kullanamazsınız. Bu türlü kullanımlar için yukarıdaki email adresine başvurarak yazardan kullanım hakkı isteyebilirsiniz.

Kitabın CD kopyasını isterseniz 20 USD karşılığı türk lirasını TC İş bankası Gebze şubesi (4543)24200892106 nolu hesaba yatırıp makbuzun kopyesıni yukarıdakı adres veya emaılle adresınizle bırlıkte gönderirseniz html. pdf ve bilgisayar programlarını içeren paket adresinize postalanır.


> başlık sayfası       >>bölüm 1


ÖNSÖZ

.. 6

BÖLÜM 1 : JAVA'YA GİRİŞ

.. 8

1.1 NİÇİN JAVA PROGRAMLAMA DİLİ 8

1.2 JAVA PROGRAMINI YAZMA VE ÇALIŞTIRMA .. 9

1.3 JAVA PROGRAMLAMA DİLİ TEMEL DEĞİŞKEN TÜRLERİ 20

1.3.1 Boolean değişken türü . 20

1.3.2 char (harf) değişken türü . 20

1.3.3 Tam sayı değişken türleri (byte, short,int,long) 21

1.3.4 Gerçek sayı değişken türleri (float, double,long double) 22

1.4 JAVA NESNESİ OLARAK TANIMLANMIŞ TEMEL DEĞİŞKENLER .. 22

1.4.1 String nesne tipi değişkeni 22

1.4.2 Integer nesne tipi değişkeni 23

1.4.3 Double nesne tipi değişkeni 23

1.4.4 diğer nesne temelli değişken türleri 24

1.5 FİNAL TERİMİ VE SABİTLER .. 24

1.6 ARİTMETİK İŞLEMLER .. 24

1.7 JAVADA MANTIKSAL İŞLEMLER

1.8 JAVA DİLİNDEKİ BİT KOMUTLARI VE İŞLEMLERİ

1.9 JAVA DİLİNİN TEMEL KOMUTLARI 29

1.9.1 if - elseif - else mantıksal karşılaştırma yapısı 29

1.9.2 while tekrarlama yapısı 32

1.9.3 for tekrarlama yapısı 33

1.9.4 switch - case yapısı 35

1.10 ARİTMETİK İŞLEMLERDE DEĞİŞKEN TÜRÜ DEĞİŞTİRME (CASTİNG) OPERASYONU .. 39

1.11 SAYI DEĞİL VE SONSUZ SONUÇLARI 39

1.12 ALIŞTIRMALAR .. 39


BÖLÜM 2 : METODLAR VE OBJECT KULLANIMI 79


2.1 JAVA API KÜTÜPHANESİ 79

2.2 METOTLAR .. 82

2.3 NESNE (OBJECT) TANIMI VE METOTLARDA KULLANIMI 84

2.4 METOTLARIN KENDİ KENDİNİ ÇAĞIRMASI (RECURSION) 86

2.5 AYNI ADLI METOTLARIN BİR ARADA KULLANILMASI (OVERLOADİNG) 89

2.6 METOT (METHOD) VE SINIF(CLASS)  DEĞİŞKENLERİ 91

2.7 ALISTIRMALAR .. 94


BÖLÜM 3 . SINIF (CLASS) YAPILARINA GİRİŞ .. 124


3.0 STANDART KAVRAMLARIN TÜRKÇE KARŞILIKLARI 124

3.1 SINIF YAPISININ GENEL TANIMI 124

3.2 KURUCU ( CONSTRUCTOR ) METOT .. 126

3.3 DİĞER METOTLAR .. 127

3.4 THIS DEYİMİNİN KULLANIMI 129

3.5 SINIF DEĞİŞKENLERİNİN DIŞ DÜNYADAN GİZLENMESİ 129

3.6 SINIFLARDA KALITIM (INHERITANCE) 133

3.7 SINIFLARI BAŞKA BIR SINIFTA NESNE OLARAK ÇAĞIRARAK BiR ARAYA GETiRME (COMPOSITION) 135

3.8 KALITIM YOLUYLA ALT SINIFA BAĞLANMIŞ ÜST SINIF REFERANSI ÜZERINDEN ALT SINIFI ÇAĞIRMA    136

3.9 NESNEYi DiNAMiK OLARAK SiLMEK FINALIZE() METOTU .. 137

3.10 ALIŞTIRMALAR .. 137


BÖLÜM 4 : BOYUTLU DEĞİŞKENLER VE NESNELER (ARRAYS) 202


4.1 TEK BOYUTLU DEĞiŞKENLER .. 202

4.2 TEK BOYUTLU NESNE TiPi DEĞiŞKENLER .. 206

4.3 ÇOK BOYUTLU DEĞİŞKENLER .. 207

4.4 BOYUTLU DEĞİŞKENLERİN METOTLARA AKTARIMI 210

4.5 BOYUTLU DEĞİŞKENLERDE BOYUT DEĞİŞTİRME . 210

4.6 ALIŞTIRMALAR .. 213


BÖLÜM 5 : SINIFLARDA HİYERARSİ, ABSTRACT SINIF VE İNTERFACE . 227


5.1 ABSTRACT SINIF . 227

5.2 INTERFACE . 231

5.3 ALIŞTIRMALAR .. 235


BÖLÜM 6 : GRAFİKLER, FONTLAR VE RENKLER .. 244


6.1 GİRİŞ . 244

6.2 GRAPHICS VE GRAPHICS2D SINIFLARI 244

6.3 RENK KONTROLÜ .. 247

6.4 YAZI KONTROLU .. 253

6.5 ÇiZGi ÇiZiMi 256

6.6 DiKDÖRTGEN ÇIZiMi 259

6.7 ÇİZİLEN ŞEKİLLERİN DEĞİŞTİRİLEREK ÇİZİMİ (TRANSFORM) 265

6.8 OVAL VE AÇILI OVAL ÇİZİMİ 267

6.9 ÇİZİMİN SEÇİLEN BİR RESİMLE DOLDURULMASI 270

6.10 POLYGON ÇİZİMİ 273

6.11 GENELLEŞTİRİLMİŞ EĞRİ ÇİZİMİ 276

6.12 RESİM GÖSTERİMİ 280

6.13 ALIŞTIRMALAR .. 281


BÖLÜM 7: GRAFİK APPLET VE ÇERÇEVE OLUŞTURMA OLUŞTURMA METOTLARI, GRAFİK KULLANICISI ARABİRİM PROGRAMLARI (GUI) , 308


7.1 GRAPHIC KULLANICISI ARABİRİM PROGRAMLARI, GUI, (GRAPHICS USER INTERFACE) 308

7.2 AWT LABEL (ETİKET) SINIFI , JAVAX JLABEL VE ICON SINIFLARI 309

7.3 BUTTON  VE JBUTTON (DÜĞME) 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 330

7.7 AWT, CHECKBOX VE CHECKBOXGROUP VE SWING JCHECKBOX VE JRADIOBUTTON SINIFLARI 333

7.8 MOUSE(FARE) KONTROLU
7.9
SWING JTABLE SINIFI

7.10 AWT, LIST SINIFI VE JAVA SWING JLIST SINIFI , LİSTEDEN SEÇİM ... 346

7.11 SWING JMENU .. 356

7.12 SWING JSLIDER SINIFI VE JPANEL TEMEL ÇİZİM ELEMANI (PANELİ) 360

7.13 FLOWLAYOUT SINIFI KULLANARAK GUI FORMATLANMASI 363

7.14 BORDERLAYOUT SINIFI KULLANARAK GUI FORMATLANMASI 365

7.15 GRIDLAYOUT SINIFI KULLANARAK GUI FORMATLANMASI
7.16 JTABBEDPANE SINIFI KULLANILARAK FORMATLAMA

7.17 JSPLITPANE SINIFI KULLANILARAK FORMATLAMA
7.18 JSPLITPANE SINIFI KULLANILARAK FORMATLAMA

7.19 PANEL VE JPANEL SINIFI 372

7.20 JOPTIONPANE SINIFI
7.21 SWING, JCOLORCHOOSER SINIFI
7.22 JFILECHOOSER SINIFI 380

7.23 JAVA JAR (JAVA ARCHIVES - JAVA ARŞİVİ) YAPILARININ KULLANIMI 382

7.24 ALIŞTIRMALAR .. 383


8.        JAVADA HATA ANALİZİ VE YAKALANMASI 473


8.1 HATA ANALİZİ 473

8.2 ALIŞTIRMALAR

.. 477

9. PARALEL KULLANIM (MULTITHREADING) , GERÇEK ZAMAN UYGULAMALARI, ANİMASYON .. 490


9.1 PARALEL KULLANIM(MULTITHREADING)  VE GERÇEK ZAMAN PROGRAMLANMASI 490

9.2 PARALEL PROGRAM KULLANIMIDA HAFIZA SİNKRONİZASYONU .. 495

9.3 ALIŞTIRMALAR .. 502


BÖLÜM 10   JAVA GİRDİ - ÇIKTI PROGRAMLANMASI 532


10.1 JAVANIN I/O (GİRDİ ÇIKTI ) KÜTÜPHANESİNDE YER ALAN SINIFLAR VE İNTERFACE’LER .. 532

10.2 FİLE (DOSYA) SINIFI 534

10.3 ARDIŞIK (SEQUENTIAL) DOSYA YARATILMASI 536

10.4 RASLANTISAL ULAŞIM DOSYASI OKU (RANDOM ACCESS FILE) 559

10.5 DOSYA SIKIŞTIRILMASI (GZIP,GUNZIP,ZIP,UNZIP) 567

10.6 ALIŞTIRMALAR .. 575


BÖLÜM 11 GELİŞMİŞ JAVA BİLGİ İŞLEME YAPILARI 648


11.1 STRINGTOKENIZER SINIFI 648

11.2 STRİNG BUFFER SINIFI 652

11.3 VECTOR SINIFI 654

11.4 LIST(LİSTE) SINIFI 664

11.5 DİZİ (STACK) SINIFI 671

11.6 SIRA (QUEUE) SINIFI 674

11.7 TREE(AGAÇ) SINIFI 676

11.8 DICTIONARY ve HASHTABLE  SINIFLARI 679

11.9 ARRAYS SINIFI VE SIRALAMA .. 681

11.10 ALIŞTIRMALAR .. 682


BÖLÜM 12 ÖRNEKLERLE SAYISAL ANALİZ .. 699


12.1  SAYISAL ANALİZE GİRİŞ . 699

12.2 MATRIX SINIFI 699

12.3 MATRIX SINIFI ÖRNEK PROGRAMLARI 729

12.4  NUMERIC SINIFI (SAYISAL ANALIZ PAKETİ)  ÖRNEK PROBLEMLERİ 757

12.5 ALIŞTIRMALAR .. 781


BÖLÜM 13 DATABASE (VERİ TABANI) PROGRAMLAMASINA GİRİŞ .. 782


13.1 TEMEL KAVRAMLAR .. 782

13.2 JAVA VE SQL BAĞLANTISI 785

13.3 ALIŞTIRMALAR .. 793


BÖLÜM 14 JAVA ANADİL (NATIVE LANGUAGE)  PROGRAMLAMASINA GİRİŞ .. 819

C++ ve C PROGRAMLAMA DİLLERİNİN JAVA İLE BİRLİKTE KULLANIMI 819


14.1 TEMEL KAVRAMLAR .. 819

14.2 DEĞİŞKENLERİN VE JAVA NESLERİNİN AKTARILMASI 820


BÖLÜM 15 JAVA BEANS (JAVA FASULYELERİ) PROGRAMLAMA .. 831


15.1 TEMEL KAVRAMLAR .. 831

15.2 ALIŞTIRMALAR .. 847


16. NETWORK PROGRAMLAMAYA GİRİŞ .. 851


16.1 TCP/IP PROTOKOLÜ .. 851

16.2 ALT SEVİYE İLETIŞIM : UDP KULLANIMI 852

16.3 TCP BİLGİ İLETİMİ,  SOCKET SINIFI 854

16.4 İNTERNET SİTELERIYLE BİLGİ ALIŞVERİŞİ, URL SINIFI 857


17. GÜVENLİK .. 864


17.1 APPLETLERDE GÜVENLİK .. 864

17.2 KONSOL PROGRAMLARINDA GÜVENLİK .. 870

17.3 GÜVENLİK SERTİFİKALARI 872

17.4 JAR DOSYALARININ GÜVENLİK KODUYLA İMZALANMASI 873

17.5 BROWSERLARDA GÜVENLİK .. 873


EK A TEXT SINIFI 875

EK B JAVA DERSİ SINAV SORULARI 880


JAVA PROGRAMLAMA DİLİ GEBZE YÜKSEK TEKNOLOJİ ENSTİTÜSÜ GÜZ DÖNEMİ 2000 BİTİRME SINAVI SORULARI 880

JAVA PROGRAMLAMA DİLİ GEBZE YÜKSEK TEKNOLOJİ ENSTİTÜSÜ 20 OCAK 2000 BİTİRME SINAVI SORULARI 889


18 REFERANS LİSTESİ 902

 


      ÖNSÖZ

 

Bilgisayar programlaması günümüz teknolojisinin önemli bir öğesidir. Benim için bu yolculuk 1975 de aldığım ilk Fortran IV programlama dili kurduyla başladı diyebilirim. O dönemde genelde teorik bazda gördüğümüz programlama dersinde yaptığımız tek gerçek program örneği kartlara delerek verdiğimiz ve sonuçları ertesi gün aldığımız ikinci dereceden denklemin köklerini hesaplar bir programdı.Kullandığımız ege üniversitesi bilgisayar merkezindeki IBM tabanlı bir "mainframe" bilgisayardı. 1978 yılının sonlarında Unix tabanlı siyah beyaz monitörler veya kağıt yazıcılı monitorler aracılığıyla çalışan IBM makinalarla çalışmaya başladım. Tabii yıl gereği Fortran 77 versiyonuna ulaşmıştı. 1982 yılında Digital VAX bilgisayarlarında programlamaya ve aynı zamanda sistem görevlisi olarak çalışmaya başladım. Bu bilgisayarlar virtual (sanal)  hafıza  özellikleriyle çok büyük programların kullanılmasına izin veriyorlardı. Dil olarakta Fortranın yanında Pascal da vardı. Üç boyutlu çizim ortamı için özel olarak gerliştirilmş evans-sutherland bilgisayarı ile de bu dönemde tanışma fırsatım oldu. Bu arada Commodore 64 bilgisayarları piyasaya çıkmıştı.  Evimde kullandığım bu küçük aletle asembler ve basic dillerini kullanarak birçok program geliştirdim. hatta assembler da yazılmış türkçe bir kelime işlem programı bile vardı. 80 li yılların sonu ve 90 lı yılların başında Pc ler, dos ortamı ve  diliyle tanıştım. sonra PC ortamı Machintosh ve Amigadan çok sonra grafik programlama ortamını büyük bir buluş olarak ortaya attı ve Windows sistemlerini çıkardı. Ve ikinci bilgisayarımı param oldukça aldığım parçaları birleştirerek kendim oluşturdum. Bu bir 80386 Pc bilgisayarı idi. Artık genelde c dilini kulanıyordum. C++ dilini gerçek anlamda kullanmaya başlamam, bilgisayar konusundaki  lisans üstü kursunu alırken oldu. Bundan sonraki tüm programlama uygulamalarımda nesne kökenli olan bu dili kullanır oldum. Aynı kursta Lisp, Parallaxis gibi değişik dillerle de çalışmıştım. Bu arada evde de yine PC tabanlı Pentium 100 bilgisayarına terfi ettik. Bana Java dilini eşimin aldığı lisans üstü kursundaki Java kursu gösterdi. Java dili yeni çıkmış, fakat yeni olmasına rağmen okullardaki bilgisayar bölümleri eğitimde hızla bu dile yönelmişlerdi. Bu dile başlar başlamaz da çok sevdim. Her şey tüm diğer dillere göre çok daha iyi düşünülmüş ve planlanmıştı. Orijinal olarak C++ da yazılmış bir çok kodu fazla bir gayrete gerek duymadan java koduna çevirerek iş ortamımda kullanmaya başladım. 1998 yılında Dokuz eylül üniversitesinde mühendislik bilimleri fakultesinde öğretim üyeleri ve master ve doktora öğrencileri için "Java programlamlama dili" dersi açtım. Bu kitabın temelini bu ders için hazırladığım ders notları oluşturmuştur. 1999 yılında Gebze ileri teknoloji Enstitüsünde aynı dersi yinelerken ders notları ilave problemlerle de zenginleşerek  biraz daha kitap halini aldı. Son bir gözden geçirmeden sonra elinizdeki haline geldi.

 

Java dili yapısı, kullanım olasılıkları ve kolay kullanımı, zengin kütüphaneleriyle geleceğin dili olacağına programcıların çoğunun inandığı bir dildir. C++ şu an itibariyle çok daha fazla kullanılan bir dil olam özelliğini sürdürmektedir, fakat C++ hatalara izin veren yapısıyla başlangıç seviyesi programcılara hitap eden bir dil değildir. Rahatlıkla hata yapabilirsiniz, ve yaptığınız bu hatalar rahatlıkla gözden kaçabilir. Hemen şunu ilave edeyim, java daha yeni emeklemeye başlamış bir bebektir, ama gelecek on yıl içinde çok iyi bir konuma yerleşmenin işaretlerini şimdiden vermektedir.

 

Türkiyede de programcılık henüz yeni yeni oluşmaya başlayan bir dal. Hem programcı kapasitesi, hem de isteklere cevap vermek için yeterli boyutta değil henüz.Programlama teknolojisinde iyi bir boyuta gelebilmek paket kullanımından değil programlamadan geçmektedir. Bu yüzden bu kitap eğer yeni programlamacılarımıza bir şeyler verebilir ve onların gelecekte daha iyi bir noktada olabilmelerini sağlayabilirse ben emeğimin karşılığını almış olurum.

 

Yeni başlayanlara bir tavsiye bilgisayar dillerini öğrenme biraz insan dillerini öğrenmeye benzer. Temel mantığını kapana kadar biraz zorlanabilirsiniz. Sakın ümitsizliğe kapılıp bırakmayın. Bir kere temel mantığını anladıktan sonra ne kadar kolay olduğunu göreceksiniz.  İyi çalışmalar.

 

Dr. Turhan Çoban

TÜBİTAK, MAM

21 Mart 2000, 21.36

turhan@mam.gov.tr

 

İKİNCİ BASKININ ÖNSÖZÜ

 

Bu Java kitabının birinci baskısı umduğumun çok üstünde ilgi gördü. Sanıyorum bunun temel sebebi türkçe kaynak eksikliğinin oldukça fazla olması. Bu ilgi üzerine kendimi biraz daha ciddi bir çalıştırma oluşturmak için sizlere borçlu hissettim. Umuyorum bu ikinci baskı çok daha fazla işinize yarayacak ve sadece bir ders notu olmanın dışında biraz daha bir referans kitabına yaklaşacak bir eser olacak. Kitabın ilk baskısında okuyuculardan oldukça yoğun mektuplar aldım, bu mektuplarda beğenilerinin yanı sıra benim de haklı bulduğum eleştiriler de yer alıyordu. Gelen eleştirilerden en yoğunu kitabıniçindeki kodların bir CD olarak sunulmamış olmasıydı. Bu ikinci baskıda bunu sağlayabilmek için elimden geleni yapacağım, fakat başarılı olamazsam kodları www.oocities.org/turhan _ coban/ adresi üzerinden yayınlamaya çalışacağım. İkinci eleştiri Text sınıfını bulamamak veya çalıştıramamak idi. Text sınıfını ben özellikle eklerde de vermiştim. Bu sınıfın amacı javanın çok yoğun kullandığı hata analizini aşarak en azından başlangıçta okuyuculara (öğrenicilere?) kolaylık sağlamaktı. Derslerde öğrenciler için bu kolaylığı sağladı da, fakat sanırım kitapta kodların verilmeyişiyle birlikte kolaylık yerine zorluk getirdi. Bu ikinci baskıda birinci bölümden itibaren girdi çıktıda birden fazla alternatif bulacaksınız. Bunların birisi de swing sınıfından olan JoptionPane sınıfı, kullanılması gayet basit olan pencere tipi bir girdi çıktı sınıfı.Swing sınıfını bu baskıda bir öncekine göre oldukça yoğun kullandım. Bazı programlarında aradaki benzerlik ve farkları görebilmeniz amacıyla swing ve awt versiyonlarını arka arkaya koydum. Swing awt’ye göre çok daha kompleks bir yapı, yalnız olasılıkları arttırdığı için java dünyasına şimdiden tamamen hakim olmuş durumda. Bu baskıda ilk baskıda olmayan java güvenlik ve java anadil programlama bölümlerini bulacaksınız. Ayrıca daha öce ayrı bir bölüm olarak verdiğimiz swing ve 2D grafik programlama bölümünü de ilgili konulara yayarak kaldırdım. Bence ilk baskıya göre elinizde daha kullanışlı bir kitap var. Elbette mükemmel değil, ama ilk baskının en azından dört katı bir emeğin sonucu. Umarım sizlere java öğrenme yolunda bir ilk adım olarak faydalı olur.

 

Bu yeni baskıyı geliştirmemde büyük payları olan Gebze Yüksek Teknoloji Üniversitesi, java dersi öğrencilerine, ayrıca bana iyi bir eğitim vermek için ellerinden gelen çabayı harcayan babam Osman ve annem Hatice’ye, Kardeşlerim Birsen, Nurhan ve İrfan’a ve bu kitabın yazılması sırasında verdiği destek için eşim Meral’e  teşekkürlerimi bildirmek isterim.

 

Dr. Turhan Çoban

TÜBİTAK, MAM

11 Mart 2001, 23.34

Turhan.Coban@posta.mam.gov.tr




> başlık sayfası       >>bölüm 1