Nesneye Yönelik Programlamaya Girişbbm102/misc/java_notes_by_oa.pdf · algoritma kavramını bildiği ve algoritma gelitirebildiği varsayılacaktır. ... Programlama (Structured

  • Upload
    hakhue

  • View
    243

  • Download
    2

Embed Size (px)

Citation preview

  • Java ile

    Nesneye Ynelik

    Programlama

    Ouz Aslantrk

  • 1 Nesneye Ynelik Programlamaya Giri............................................ 9

    1.1 Modelleme ............................................................................. 9

    1.2 Bilgisayar Programlar ve Modelleme ....................................... 10

    1.3 Nesneye Ynelik Modelleme ................................................... 11

    1.3.1 Snf ve Nesne Kavramlar .............................................. 11

    1.4 Nesneye Ynelik Programlama ............................................... 13

    1.5 Nesneye Ynelik zmleme ve Tasarm ................................. 15

    1.6 Nesneye Ynelik Programlama Dilleri ...................................... 15

    1.7 zet .................................................................................... 16

    2 Java Platformu .......................................................................... 18

    2.1 Platformdan Bamszlk ........................................................ 19

    2.2 Java Sanal Makinesi (Java Virtual Machine - JVM) ..................... 22

    2.3 Java Uygulama Programlama Arayz (Java Application

    Programming Interface - API) ........................................................ 25

    2.4 zet .................................................................................... 28

    3 Java Dili le lgili Temel Bilgiler ................................................... 30

    3.1 Szdizim Kurallar (Syntax Rules) ........................................... 30

    3.1.1 Derleyiciler ................................................................... 30

    3.1.2 Whitespace karakterleri ................................................. 30

    3.2 Aklama Satrlar (Comment Lines) ........................................ 31

    3.2.1 ile yaplan aklamalar ................................................... 32

    3.2.2 * ... */ ile yaplan aklamalar ..................................... 32

    3.2.3 ** ... */ ile yaplan aklamalar ................................... 33

    3.3 Temel Trler (Primitive Types) ............................................... 35

  • 3.4 Deiken Tanmlama ve lk Deer Atama (Variable Declaration and

    Initialization) ............................................................................... 36

    3.4.1 Deikenin Tanm Alan (Scope) ...................................... 37

    3.5 leler (Operators)............................................................... 38

    3.5.1 Aritmetik ileler: .......................................................... 38

    3.5.2 Birleik Aritmetik leler: .............................................. 38

    3.5.3 Arttrma ve Azaltma leleri: ......................................... 38

    3.5.4 likisel (relational) ileler: ........................................... 40

    3.5.5 Mantksal leler: ......................................................... 40

    3.5.6 lelerin ncelikleri: ..................................................... 41

    3.6 Denetim Deyimleri (Control Statements) ................................. 42

    3.6.1 if else deyimi ......................................................... 42

    3.6.2 if else if deyimi .................................................... 45

    3.6.3 switch deyimi ............................................................. 46

    3.7 Dngler (Loops) .................................................................. 48

    3.7.1 while dngs ............................................................. 48

    3.7.2 do - while dngs ..................................................... 49

    3.7.3 for dngs ................................................................ 50

    3.8 zet .................................................................................... 52

    4 Uygulama Gelitirme Ortam ....................................................... 53

    4.1 JDK ve JRE .......................................................................... 53

    4.2 Java ile ilk program............................................................... 55

    4.2.1 lk program .................................................................. 56

    4.2.2 Derleme ....................................................................... 56

    4.2.3 altrma ve main yntemi ............................................ 57

  • 4.3 Eclipse Platformu .................................................................. 59

    5 Java ile Nesneye Ynelik Programlama ......................................... 61

    5.1 Snf Tanmlar ...................................................................... 61

    5.2 Nesne Oluturma .................................................................. 66

    5.2.1 new ileci ..................................................................... 66

    5.2.2 Referans Tr ................................................................ 67

    5.2.3 Yn (Heap), Yt (Stack) ve p Toplayc (Garbage

    Collector) ................................................................................. 67

    5.2.4 Kurucular (Constructors) ................................................ 70

    5.2.5 this anahtar szc .................................................... 73

    5.2.6 Kurucu Ar Ykleme (Constructor Overloading) ............... 74

    5.2.7 Kurucularn Birbirini armas ........................................ 77

    5.2.8 Yntem Ar Ykleme (Method Overloading) .................... 79

    5.2.9 Diziler .......................................................................... 81

    5.3 Sarmalama (Encapsulation) lkesi ve Eriim Dzenleyiciler (Access

    Modifiers) .................................................................................... 86

    5.3.1 Sarmalama lkesi .......................................................... 86

    5.3.2 Paket Kavram .............................................................. 91

    5.3.3 Eriim Dzenleyiciler ..................................................... 95

    5.3.4 get/set Yntemleri ........................................................ 96

    5.4 Snf/Nesne Deikenleri ve Yntemleri .................................. 101

    5.4.1 static anahtar szc .............................................. 103

    5.4.2 main yntemi ............................................................. 110

    5.4.3 static kod bloklar ..................................................... 111

    5.4.4 final anahtar szc ve sabit tanmlama .................... 114

  • 5.5 Kaltm (Inheritance) ........................................................... 115

    5.5.1 Nesneye Ynelik Bir Modelde Snflar Aras likiler .......... 115

    5.5.2 Javada Kaltm ........................................................... 118

    5.5.3 Kaltmla Gelen Nitelik ve Yntemlere Eriim ................... 125

    5.5.4 protected Eriim Dzenleyici ....................................... 127

    5.5.5 Kurucu Zinciri ve super Anahtar Szc ....................... 129

    5.5.6 Yntemlerin Geersiz Klnmas (Method Overriding) ........ 135

    5.5.7 Yntemlerde Geersiz Klmann final ile Engellenmesi .... 139

    5.5.8 Object snf ............................................................... 139

    5.6 okbiimlilik (Polymorphism) ............................................... 142

    5.6.1 Ata Snf Referansndan Alt Snf Nesnesine Ulama ......... 142

    5.6.2 Ge Balama (Late Binding) ......................................... 143

    5.6.3 okbiimlilik Nasl Gerekleir? ..................................... 144

    5.6.4 okbiimlilik Ne e Yarar? ........................................... 149

    5.6.5 Soyut Snflar (Abstract Classes) ................................... 150

    5.6.6 Arayzler (Interfaces).................................................. 164

    5.7 Aykr Durumlar (Exceptions) ............................................... 175

    5.7.1 try catch blou ..................................................... 178

    5.7.2 finally deyimi .......................................................... 183

    5.7.3 Javada Aykr Durumlar ............................................... 185

    5.7.4 Programcnn Kodlad Aykr Durumlar ......................... 188

    5.7.5 Aykr Durumlarn Ynetilmesi ....................................... 191

    5.8 Girdi/kt (Input/Output I/O) lemleri ............................... 197

    5.8.1 JavaBean Kavram ....................................................... 198

    5.8.2 JavaBean Yazma Kurallar ............................................ 200

  • 5.8.3 Seriletirme (Serialization) ........................................... 200

    5.8.4 java.io.Serializable Arayz .................................. 202

    5.8.5 GUI Editor Property Editor . Error! Bookmark not defined.

    5.8.6 JavaBean rnei ................. Error! Bookmark not defined.

    6 Eksik konular: ................................. Error! Bookmark not defined.

  • nsz

    Bu kitap en azndan Yapsal Programlama bilen okuyucular iin

    hazrlanmtr. Temel programlama bilgileri anlatlmayacak, okuyucunun

    algoritma kavramn bildii ve algoritma gelitirebildii varsaylacaktr.

    Amacmz Java programlama dilini ya da Java platformunu anlatmak deil,

    Nesneye Ynelik Programlama yaklamn aklamak ve bu yaklam ile

    uygulama gelitirmeyi retmektir. Programlama konularn renmenin

    en iyi yolunun programlar yazmak olduunu dndmz iin, nesneye

    ynelik programlar yazmak durumundayz ve bunun iin bir dil

    kullanlmas gerekiyor. Bu kitap iin programlama dili Java olarak

    seilmitir ancak benzer ierik rnein C++ dili ile de verilebilir.

    Kitap ierisinde kullanlacak terimler iin genelde Trkiye Biliim Dernei

    szl esas alnacak, kullanlan Trke terimlerin ngilizce karlklar da

    parantez iinde verilmeye allacaktr. Karl henz oturmam ya da

    kullanld balamda istenen anlam veremedii dnlen terimler iin

    ise, yaygn kullanlmakta olan terimler tercih edilecek, Trke terimler ile

    karlanamayan baz szckler/teknolojiler iin ngilizce terimler italik

    yazlacaktr.

  • Giri

  • 1 Nesneye Ynelik Programlamaya Giri

    Programlar, gerek hayatta karlalan bir takm problemlerin zlmesi

    iin bilgisayarlarn hzl ve doru ilem yapabilme yeteneklerinden

    faydalanmak zere yazlrlar. Bilgisayarlarn hz ve kapasiteleri arttka

    gelitirilen programlar da bu hz ve kapasiteden faydalanabilecek ekilde

    gelierek deimektedir. Bu karlkl gelime ve deime, zaman

    ierisinde program gelitirme yntemlerinde de deiikliklere neden olmu,

    bylece eitli program gelitirme yaklamlar ortaya kmtr.

    Nesneye Ynelik Yazlm Gelitirme (Object Oriented Software

    Development), bir yazlm gelitirme yaklamdr. Nesneye ynelik

    yaklam dnda eitli yaklamlar da bulunmakla birlikte (Yapsal

    Programlama (Structured Programming), Bileen Tabanl Yazlm

    Gelitirme (Component Based Software Development), Bakml

    Programlama (Aspect Oriented Programming)... ) kendisinden nceki

    yaklamlarn baz aklarn kapatan, kendisinden sonraki yaklamlarn

    (ounun) da alt yapsn oluturan bir yaklam olarak olduka geni

    kullanm alan bulmutur.

    1.1 Modelleme

    Gerek hayattaki problemleri bilgisayarn sanal ortamnda zebilmek iin,

    hereyden nce problemin uygun ekilde bilgisayar ortamna aktarlmas

    gerekmektedir. Bu ilem soyutlama (abstraction) ya da modelleme

    (modeling) olarak anlr.

    Modelleme, insann problem zmek zere eskiden beri kulland bir

    yntemdir. Byke bir problemin tamamn zihinde canlandrp zmeye

    almak yerine, oluturulacak model ya da modeller zerinde hedef

    sistemin grn, davran ya da baz durumlarda verdii tepkiler

    gzlemlenebilir.

    Model, var olan ya da gerekletirilmesi planlanan bir sistemi anlamak ya

    da anlatmak zere oluturulabilir ve birok farkl alanda etkili bir ekilde

  • kullanlmaktadr. rnein, bir toplu konut inaatn mterilerine tantmak

    isteyen bir inaat firmas, binalarn yerleimlerini, renk ve greli

    byklklerini grsel olarak ifade eden maket ya da maketler hazrlar. Bu

    maketi inceleyen bir kimse, almak istedii konutun nerede olduunu, okul

    binasna yaknln ya da anayola ulamn nasl olduunu grerek

    deerlendirebilir. Burada model makettir ve hedef sistemi anlatmak

    amacn yerine getirmektedir.

    Modelin mutlaka elle tutulur olmas da gerekmez. Bilgisayar benzetimi ile

    de eitli modeller oluturulabilir. rnein bir uan havadaki hareketini

    incelemek zere gelitirilmi bir bilgisayar benzetimi ile uak

    modellenebilir. Kanat uzunluu ya da gvde eimi gibi parametrelerle

    oynanarak uan farkl hava koullarnda nasl davranaca anlalmaya

    allabilir. Burada, sistemin davrann anlamak amacyla, sanal ortamda

    oluturulmu bir model sz konusudur.

    Bir sistemle ilgili birden ok model oluturulabilir. Tek bir model ile

    sistemin tamamn grmeye almak yerine, zerinde allan sistemin

    farkl ynlerini ne karan modeller hazrlanabilir. rnein inaat firmas

    toplu konutu mterilere anlatmak zere estetik tasarm n plana kan

    bir maket hazrlarken, bu toplu konut projesindeki binalarn elektrik

    tesisat iin farkl, su tesisat iin farkl, genel daire grnm iin farkl

    projeler hazrlar. Bylece ayn sistemin farkl ynleriyle ilgilenen kimseler,

    yalnzca kendilerini ilgilendiren yn ne karan model zerinde alma

    olana bulurlar.

    1.2 Bilgisayar Programlar ve Modelleme

    Bilgisayar programlar, makina ortamna aktarlacak problemin zmn

    oluturmak zere gelitirilir. Bilgisayar program yazmak iin ncelikle,

    doal dil ile ifade edilen problemin makina ortamnda yeniden

    oluturulmas gerekir. ou zaman gelitirilecek program gerek sistemin

    tamam ile ilgilenmez. Bu durumda, zerinde allan problem, sistemin

    belirli bir adan grnm olarak deerlendirilebilir. Bilgisayar ortamna

  • bu grnm aktarabilmek iin bir model oluturulmas gerekir.

    Oluturulan model gerek hayattakine ne kadar benzer ya da yaknsa,

    programlamann o kadar kolaylaaca dnlr. nk programc da bir

    insandr ve her ne kadar programlama yaklamlarna hakim ve bu

    dorultuda dnmeyi renmi olsa da iinde yaad dnyay olduu

    gibi alglamak, zerinde alt problemi baka insanlarn grd gibi

    grmek onun iin de en doal olandr.

    1.3 Nesneye Ynelik Modelleme

    Nesneye ynelik programlama yaklam, gerek hayattan alnm

    problemi zmek zere oluturulacak modelin, gene gerek hayatta var

    olan nesneler ve bu nesneler arasndaki ilikilerden faydalanlarak

    oluturulmasn ilke edinmitir. Problem aynen gerek hayatta grld

    ekli ile sanal ortama aktarlabilirse, gnlk yaamnda nesneler ve

    nesneler aras ilikiler ile etkileimde olan programc, nesneye ynelik

    model sayesinde, zerinde alt problemi aynen gerek hayatta olduu

    ekliyle grebilecektir.

    Peki nesneye ynelik model nasl oluturulur? Problem gerek hayattakine

    benzer ekilde nasl modellenebilir? Bu sorulara birlikte yant arayalm.

    1.3.1 Snf ve Nesne Kavramlar

    Bir otomobil dnelim. Otomobilin marka ve modeli ne olursa olsun, gaza

    basnca hzlandn, frene basnca yavaladn, direksiyonu herhangi bir

    tarafa evirince otomobilin o tarafa dndn hepimiz biliyoruz. Bunlar

    otomobillerin genel davranlardr ve btn otomobiller bu davranlar

    sergiler.

    Ayrca, her otomobilin bir motoru, lastikleri, farlar, direksiyonu, dikiz

    aynas vardr. Marka ve modeli ne olursa olsun, gene btn otomobillerde

    bunlar ve daha birok baka aksam bulunmaktadr. Baka bir deyile,

    btn otomobiller bu zellikleri tamaktadr.

  • Bu rnekte otomobil bir snftr. Otomobil denilince aklmza gelen temel

    davranlar ve zellikler, btn otomobillerde vardr. Her otomobil gaza

    basldnda ayn srede 100 km hza ulaamyor olsa da, gaza

    basldnda btn otomobiller hzlanr. Ya da btn otomobillerin lastikleri

    ayn byklkte olmasa da, btn otomobillerin lastikleri vardr. Snf, ayn

    zellik ve davranlar sergileyen varlklarn ortak kmesini belirleyen

    tanmdr. Hi otomobil grmemi birisine otomobilin ne olduunu

    anlatmaya kalksak, kapmzn nnde duran belirli bir otomobili deil, o

    kiinin bir otomobil grdnde tanmasn salayacak, btn otomobiller

    iin ortak olan bilgiyi aktarmaya alrz.

    Baka bir rnek verelim; kalem. Kalem dediimizde hepimizin aklna

    bireyler gelir. Yaz yazmak zere kullanyoruz, eitli renk, boy, tip, u

    kalnl ve fiyatlarda olabilir.. vs. Kalem deyince, hepimizin tand,

    bildii bireyden bahsetiimiz iin hepimiz kafamzda bireyler

    canlandryoruz. Ancak ok byk olaslkla herkesin aklnda canlanan

    resim birbirinden farkl; kimimiz kurun kalem, kimimiz dolmakalem,

    kimimiz tahta kalemi dnyoruz ve belki kurun kalemlerin ounun tipi

    birbirinden farkl. Ama sonuta btn kalemlerin yaz yazma davran ve

    renk ya da u kalnl zellii var ve bunlar kalem snfn belirleyen

    noktalar.

    zetle snf, o snftan olan btn varlklarn ortak zellik ve davranlarn

    anlatan bir tanmdr.

    Nesne ise ait olduu snftan gelen zelliklerin deerlerinin belli olduu,

    snf iin tanml olan davranlar nasl sergilediinin bilindii, somut

    olarak var olan, biricik bir kimlii olan varlktr. rnein, otomobil snfna

    ait olan 06-XYZ-1234 plakal bir otomobil nesnesinden bahsediyorsak, sz

    konusu nesnenin kimlii plaka numarasdr ve genel olarak otomobillerden

    deil, markas, modeli, rengi belli olan, gaza basldnda 100 km/saat hza

    ka saniyede ulat bilinen, elle gsterilebilen tek bir varlktan sz

    ediyoruz demektir.

  • Ayn snfa ait birok nesne olabilir, u an Ankarada binlerce otomobil

    bulunduu gibi. Ayn snfa ait olan nesnelerin hepsinde, o snftan gelen

    zellik ve davranlar bulunmaktadr. Ancak herbir nesne iin bu

    zelliklerin deerleri farkl, davranlarn gerekletirilii de bu zelliklere

    bal olarak farkl olabilir. rnein, 06-ZBC-9876 plakal krmz spor

    otomobil 100 km/saat hza 6 saniyede ularken, 06-XYZ-1234 plakal

    mavi otomobil 100 km/saat hza 12 saniyede ulayor olabilir. Ya da spor

    otomobilimiz 100 kmlik yolda 10 lt benzin tketirken, dier otomobilimiz

    ayn mesafede 6,5 lt benzin tketiyor olabilir. Burada nemli olan, her iki

    otomobilin de otomobil snfndan gelen zellik ve davranlar kendilerine

    zg bir biimde sergiliyor olmalardr.

    1.4 Nesneye Ynelik Programlama

    Nesneye ynelik programlama, nesnelerin birbirlerine ileti gndermeleri

    ilkesine dayanr. Bir nesne, baka bir nesneye bir ileti (message)

    gndererek, o nesneden bir davran (behaviour) sergilemesini ister.

    letiyi alan nesne, bu iletiye gre davrann gerekletirir ve kendi

    durum (state) bilgisini deitirir.

    Bunu bir rnekle aklamaya alalm:

    Bir otomobil, otomobilin srcs ve otomobilin dndaki bir yaya

    dnelim. Burada tane nesnemiz var; OTOMOBL, SRC ve YAYA

    nesneleri. Otomobilin gazaBasld davran ile hz ve motorHacmi

    zellikleri var. Ayrca, otomobilin hznYaz davran da, bu davran

    sergilendii anda hz zelliinin deerini ekrana yazyor. Src ve yaya

    nesnelerinin zellik ve davranlar ile ise u anda ilgilenmiyoruz.

    ekil 2.1de, bu nesneler grlyor.

  • ekil 1-1. Nesneye Ynelik Programlama

    lk olarak SRC nesnesi, OTOMOBL nesnesine bir ileti gndererek

    gazaBasildi davrannda bulunmasn istiyor. Bunun zerine, OTOMOBL

    nesnesi, hz zelliinin deerini motorHacmi zelliinin deerine bal

    olarak deitiriyor (hzlanyor). Yani OTOMOBL, davran

    gerekletirerek durumunu deitiriyor. Bu ilem bittikten sonra,

    YAYA nesnesi, OTOMOBL nesnesine yeni bir ileti gndererek hznYaz

    davrannda bulunmasn istiyor. hznYaz davran, OTOMOBL

    nesnesinin yeni hzn (hz zelliinin deerini) ekrana yazyor.

    Eer bu nesneleri, zellikleri ve davranlar daha ayrntl bir ekilde ele

    alrsak; rnein OTOMOBL nesnesinin hznYaz davrann ekrana yaz

    olarak deil de srekli yenilenen bir resim olarak getirmeyi baarabilirsek;

    bir otomobil yar oyunu programlayabiliriz.

  • 1.5 Nesneye Ynelik zmleme ve Tasarm

    zmleme, hedef sistemin ne yapmas gerektiinin belirlendii

    aamadr. Bu aamada alan insann bilgisayar programlama bilgisinin

    olmas gerekmez. nemli olan, zerinde alt sistemi tanyabilmek, dile

    getirilen gereksinimleri iyi anlayp bu gereksinimlerin arkasnda kalan ve

    dile getiril(e)meyen gereksinimleri de bulup kartmak, iin kurallarn ve

    ileyiini irdeyebilmektir.

    Nesneye ynelik zmleme, zmlemeyi yaparken snflar ve

    nesnelerden faydalanr. Sistemdeki snflarn, bu snflarn zellik ve

    davranlarnn ne olmas gerektiinin belirlenmesi ile urar.

    Tasarm ise hedef sistemin nasl gerekletirilecei sorusuna yant arar.

    Tasarm aamas modelin ortaya kt aamadr. Model tasarma bal

    kalnarak oluturulur ve zmleme aamasnda belirlenen gereksinimlerin

    karlanp karlanmad model zerinde snanabilir.

    Nesneye ynelik tasarm, modeli oluturmak zere snflar ve nesnelerden

    faydalanr. Snflar aras ilikiler ayrntl olarak incelenir, gereksinimleri

    karlamak zere ilikiler, zellikler ve davranlar ekillendirilir. Tasarm

    sona erdiinde, ortaya nesneye ynelik bir model kar. Nesneye ynelik

    modelin ifade edilmesi iin bir takm grsel diller kullanlmaktadr.

    Bunlardan en bilineni ve artk bir standart haline gelmi olan dil, Unified

    Modelling Language (UML) ad ile bilinir. Tasarm aamas genelde hedef

    sistemin eitli alardan grnlerini ifade eden UML belgeleri ile son

    bulur.

    1.6 Nesneye Ynelik Programlama Dilleri

    Nesneye ynelik model ortaya ktktan sonra, bu modelden nesneye

    ynelik programa gemek modeli oluturmaktan daha kolaydr. nk

    programlama aamas, modelin bir programlama dili ile ifade edilmesi

    aamasdr ve modeldeki hereyin programlama dilinde neye karlk

    geldii bellidir. Seilen herhangi bir nesneye ynelik programlama dili ile o

    model (modeldeki baz alt dzey ayrntlar dnda) kodlanabilir.

  • Eer UML gibi bir dil kullanlmsa, oluturulan model bir UML arac ile

    izilebilir. ou zaman bu tr aralar, seilen programlama diline gre kod

    retebilme (code generation), hatta verilen koddan modele geri dnebilme

    (reverse-engineering) yeteneklerine sahiptir.

    Demek ki nemli olan hedef sistemin hangi programlama dili ile

    gelitirilecei deil, hedef sistem iin gerekli olan modelin

    oluturulabilmesidir. Sonraki aamada programalama dili seimi

    programlama ekibinin bilgi birikimine, kurumun daha nceki yatrm ve

    deneyimlerine ya da sistemin gelitirilmesini isteyen mterinin zel

    gereksinimlerine gre yaplabilir.

    1.7 zet

    Bu blmde, Nesneye Ynelik Programlama ile ilgili eitli kavramlara

    ksaca deindik.

    Model, hedef sistemin tamamn bir kerede anlamaya almak yerine

    ilgilenilen ksmn daha kolay anlayabilmek/anlatabilmek iin ok uzun

    zamandr kullanlmaktadr. Modelleme ise modeli oluturma ilemidir.

    Bilgisayar programlar, gerek hayattaki problemlerin bilgisayarn doru ve

    hzl ilem yapma yeneteinden faydalanlarak zlmesi amacyla

    gelitirilirler ve bunun iin ncelikle bilgisayar ortamnda problemin ifade

    edilebilmesi gerekir. Bu srete modeller kullanlr.

    Nesneye ynelik modelleme, modelleme ileminin nesneler ve nesneler

    aras ilikilerin incelenmesi yolu ile yaplmas ilkesine dayanr.

    Nesneye ynelik programlama, nesnelerin birbirlerine ileti gndermeleri,

    iletiyi alan nesnenin bir davran yerine getirmesi ve davrann yerine

    getirilmesi sonucunda durumunun deimesi ile gerekletirilir.

    Nesneye ynelik zmleme, sistemde ne yaplmas gerektiinin ve hangi

    snf, nesne, zellik ve davranlarn bulunduunun belirlendii aamadr.

  • Nesneye ynelik tasarm ise snflar aras ilikilerin belirlendii, zellik ve

    davranlarn yeniden incelenip son eklini ald, sonucunda nesneye

    ynelik modelin ortaya kt aamadr.

    Nesneye ynelik programlar, nesneye ynelik modelin herhangi bir

    nesneye ynelik programlama dili ile ifade edilmesi sonucunda ortaya

    kar. Bir model birok farkl dille ifade edilebilir.

  • 2 Java Platformu

    Java yalnzca bir programlama dili deildir. Java Platformunu oluturan

    eitli alt geler bulunmaktadr:

    Bir programlama dili,

    Bu programlama dili ile yazlm programlarn zerinde alaca

    altyap,

    Farkl alanlarda (masast, cep telefonu, saat, web tabanl...)

    uygulama gelitirmek iin kullanlan yardmc ara ve ktphaneler,

    Bu ktphanelerin belirtimleri (specification),

    Btn bunlarn en iyi baarm elde etmek zere nasl kullanlmalar

    gerektiini anlatan en iyi uygulama (best practice) belgelerinin

    tamam

    Java Platformu, birbirlerinden tamamen bamsz olmayan alt

    platform/teknoloji iermektedir;

    Java Standart Edition (JSE): Temel Java uygulamalarnn gelitirilmesi iin

    gerekli ekirdektir.

    Java Enterprise Edition (JEE): Byk lekli, datlm kurumsal

    uygulamalarn gelitirilebilmesi iin kullanlr.

    Java Micro Edition (JME): Cep telefonu, saat, el bilgisayar gibi kk

    lekli ortamlara uygulama gelitirmek iin kullanlr.

    Herbir teknoloji kendi iinde birok ktphane, uygulama ats

    (framework) ve belge iermektedir. Ancak ncelikle JSE

    platform/teknolojisinin renilmesi zorunludur. nk Java

    platformlarndan herhangi birisi ile uygulama gelitirebilmek iin ncelikle

    Core (ekirdek) Java ad verilen ksm bilinmelidir.

    Bu kitabn ilgi alan JEE ya da JME platformlar deildir. Kitap ierisinde

    Java Platformu denildiinde, aksi belirtilmedike, JSEden

    bahsedilmektedir.

  • Platform, bir programn alt donanm ya da yazlm ortamdr.

    Java platformu, Java programlarnn almas iin gerekli olan iki

    bileenden oluur:

    1- Java Sanal Makinesi (Java Virtual Machine)

    2- Java Uygulama Programlama Arayz (Application Programming

    Interface-API)

    Platformdan Bamszlk balamnda kullanlacak olan platform szc

    ise, donanm ve o donanm zerinde alacak olan iletim sistemini ifade

    etmektedir. rnein Windows32 platformu, 32 ikillik Windows iletim

    sisteminin alt bir ortam ifade etmektedir.

    Platform szcnn kullanld balama gre deerlendirilmesi gereklidir.

    2.1 Platformdan Bamszlk

    Java ile ilgili konuulurken genelde ilk sylenen Javann platformdan

    bamsz bir dil olduudur. Peki platformdan bamszlk ne demektir?

    Platformdan bamszln ne olduunu anlatabilmek iin, ncelikle

    platforma bamlln ne olduunu aklamaya alalm. zerinde

    Windows98 iletim sisteminin almakta olduu bir kiisel bilgisayar

    zerinde, Visual Studio 6.0 tmleik gelitirme ortamn (Integrated

    Development Environment - IDE) kullanarak C dili ile bir program

    gelitirdiimizi dnelim. Program derlendii zaman, altrlabilir

    (zerine ift tkladmzda ya da konsolda adn yazdmzda almaya

    balayan: executable), .exe uzantl bir dosya (file) oluur. Bu program,

    Windows98 iletim sistemi zerinde altrlabilir bir dosya (executable

    file) olarak saklanmaktadr.

    Bu altrlabilir dosyay, zerinde Linux iletim sistemi alan baka bir

    makineye kopyaladmzda programn almadn grrz. nk o

    altrlabilir dosya, ancak Windows ortamnda alabilecek ekilde

    oluturulmutur. Baka bir deyile, hangi platformda alaca bellidir.

    Bunun nedeni, belli bir platform (iletim sistemi + donanm) zerinde

  • almak zere oluturulmu altrlabilir dosya iinde saklanan bilgilerin

    o platforma zel olarak retilmi olmasdr.

    Bir C programnn geirdii aamalar ekil 4-1de grlmektedir.

    ekil 2-1. C Programlarnn Geirdii Aamalar

    C programlar platforma zel olduklarndan, ayn C programnn baka bir

    platformda altrlabilmesi, C programnn o platform iin yeniden

    derlenmesini ve altrlabilir dosyaya dntrlmesini gerektirir.

    Java platformunda ise yaklam farkldr. Programn zerinde alaca

    platforma zel kodlar retilerek altrlabilir dosya oluturulmas yerine,

    herhangi bir platform zerinde baka bir ara uygulama tarafndan

    yorumlanabilecek kodlar retilir. Bu ara uygulama ise Java Sanal

    Makinesi (Java Virtual Machine JVM) ad ile bilinir.

    Java kaynak kodlar yazlp .java uzants ile kaydedildikten sonra, bir

    Java derleyicisi ile derlenir. Derleme sonucunda oluan .class uzantl

    dosyaya snf dosyas (class file) ad verilir. Bir snf dosyas, herhangi bir

    platforma zel olmayan, herhangi bir JVM tarafndan yorumlanabilecek,

    byte-code olarak adlandrlan ikil (binary) bilgiler ierir. rnein

    WindowsXP ortamnda yazdmz Java programn Linux ortamna tamak

    istediimizde, bu derlenmi snf dosyalarn (.class uzantl dosyalarn)

  • Linux ortamna kopyalamamz yeterlidir. Linux ortam iin gelitirilmi olan

    JVM, zerinde hibir deiiklik yapmadan Linux ortamna aktardmz

    dosyalar yorumlayarak altracaktr.

    Baka bir deyile, Java dilinin platformdan bamsz olmas, btn yaygn

    platformlar iin (Windows, Linux, Unix ya da Apple ortamlar iin) birer

    JVMnin gelitirilmi olmas ile salanmtr. JVM, bir belirtime

    (specification) uymaktadr ve bu sayede o belirtime uygun olarak

    gelitirilmi btn Java programlarn farkl platformlarda ayn ekilde

    altrabilmektedir. Ksaca, Java kaynak kodu ile platforma zel makine

    kodu arasna bir katman daha eklenmi, derlenmi Java dosyalarnn bu

    katmandan alnan hizmet ile altrlmas salanmtr. Bylece

    programclarn ii kolaylamakta, gelitirdikleri uygulamalar hi deiiklie

    uramadan farkl platformlarda alabilmektedir.

    ekil 4-2de bir Java programnn platformdan bamszlnn

    salanmasnda JVMnin nasl rol oynad grlmektedir.

    ekil 2-2. Java Programlarnn Platformdan Bamszlnda JVMnin Rol

  • Javann platformdan bamszlnn bu ekilde salanmas, yani java

    kaynak dosyalarndan retilen kodlarn (byte-code) JVM gibi bir ara

    katman tarafndan iletilmesi, Java programlarnn, hedef platforma zel

    retilen zgn kodlarn (native codes) iletilmesi mantna dayanan C gibi

    dillerle gelitirilen programlara oranla az da olsa daha yava olmasna

    neden olmaktadr. Bu, platformdan bamszlk iin denen bir bedel

    olarak grlebilir. Bununla birlikte derleyici ve JVM teknolojilerindeki

    ilerlemeler Java programlarnn baarmn platformdan bamszlk

    prensibinden dn vermeden zgn kodlarn baarmna yaklatrmaktadr.

    Java programlarnn platformdan bamszln vurgulayan slogan:

    Write once, run anywhere: Bir kez yaz, heryerde altr

    2.2 Java Sanal Makinesi (Java Virtual Machine - JVM)

    Java Sanal Makinesinin, Java programlarnn paltformdan bamszln

    nasl saladn bir nceki blmde aklamaya altk. Bu blmde ise

    JVMnin Java programlarn nasl ilettiini kabaca anlatmaya alacaz.

    Hereyden nce unu sylemekte yarar var: birden fazla JVM olabilir ve

    bunlarn birbirlerine gre daha iyi ya da daha kt baarmlar

    (performance) olabilir. Bunun nedeni basittir. JVM iin bir belirtim

    (specification) bulunmaktadr. Bu belirtim, JVM ad verilen yazlmlarn

    uymalar gereken kurallar, salamalar gereken kstlar, ksaca bir

    yazlmn JVM olarak adlandrlabilmesi iin gerekli hereyi tanmlamaktadr.

    Belirtim, ne olmas gerektiini belirleyen ancak nasl olmas gerektii

    konusunda bir kst getirmeyen bir belgedir. Dolaysyla, ayn belirtimi

    gerekletiren farkl yazlm ekipleri, kendi gerekletirimlerinde

    (implementation) kullandklar veri yaplar ya da algoritmalar sayesinde

    dierlerinden daha yksek baarml JVMler gelitirebilirler.

    http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.d

    oc.html adresinde JVM belirtimi bulunabilir.

    http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.htmlhttp://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html

  • Java Sanal Makinesi, Java programlarn altrmak zere bir takm

    grevler iermektedir. Bu grevlerin bazlarna ksaca bakalm:

    Snf Ykleyici (Class Loader): Java programlar birbirleriyle etkileimde

    bulunan snflardan oluur. Bir snfn nesnesinin oluturulabilmesi iin nce

    snfn bellee yklenmesi gerekir. Snf Ykleyici grevi, .class uzantl

    dosya iinde bulunan Java snfn bellee ykler.

    Byte-kod Dorulayc (Byte-code Verifier): Bellee yklenen byte-

    kodlar inceleyerek trlere dair bilgileri oluturur ve btn parametrelerin

    trlerini dorular. Ayrca bir takm gvenlik kstlarn denetler.

    Yorumlayc (Interpreter): Bellee yklenmi ve dorulanm byte-

    kodlar JVMnin zerinde almakta olduu platforma zel kodlara

    dntrerek iletir.

    ekil 4-3te bu grevlerin almas grlmektedir.

  • ekil 2-3. JVM indeki Baz Grevler

    Java programlarnn altrlmasnda rol alan 3 temel greve baktktan

    sonra, biraz da JVMnin yapsna bakalm. Daha sonra anlatacamz

    kesimlerde bu yapya gndermeler yapacaz.

    Java Sanal Makinesinin, sanal donanm kesimi 4 temel blmden oluur:

    yazmalar (registers), yt (stack), yn (heap) ve yntem alan

    (method-area). Bu blmler, oluturduklar sanal makine gibi sanal (ya da

    soyut) blmlerdir ancak her JVM gerekletiriminde bir ekilde bulunmak

    zorundadrlar.

    32 ikillik JVM iinde bir bellek adresi 32 ikil (bit binary digit) ile ifade

    edilir. Baka bir deyile 32 ikillik JVM, herbiri 1 byte veri ieren 232 adet

    bellek yerleimini, yani 4GBlik bellei adresleyebilir.

  • Adresleme hesaplarnn nasl yapldn merak eden okuyucularmz iin

    hesaplamay biraz daha aalm:

    Adreslemede

    kullanlan

    ikil says

    Bu ikiller ile ifade

    edilebilecek farkl deer

    says

    Bu saynn

    ifadesinde

    kullanlan

    ksaltma

    Bu kadar Byte

    anlamnda

    kullanlan

    ksaltma

    10 ikil 210 = 1024 Kilo KB

    20 ikil 220 = 210 x 210 = Kilo x 1024 Mega MB

    30 ikil 230 = 220 x 210 = Mega x 1024 Giga GB

    32 ikil 232 = 4 x 230 = 4 x Giga 4 Giga 4GB

    Tablo 2-1. Adresleme Hesaplar

    32 ikillik JVMnin iindeki her yazma 32-ikil uzunluunda bir adres tutar.

    Yt, yn ve yntem alanlar da bu 32-ikil ile ifade edilebilen 4GB

    byklndeki bellein bir yerlerinde olmak zorundadr. Ancak neyin

    nerede saklanaca, kullanlan JVMye zeldir.

    Burada anlatlanlar kabaca u anlama gelmektedir. Kiisel bilgisayarnzda

    bir Java program iletmek iin bilgisayarnza kuracanz JVM (sonraki

    kesimlerde JVMnin nasl kurulduuna bakacaz), bilgisayarnzn belleinin

    en fazla 4 GBlk bir ksmn kullanabilir. Gnmzde satlmakta olan kiisel

    bilgisayarlarn genelde 2GB - 4GB bellekleri olduunu dnrsek, bu snrn

    ou zaman yeterli olaca sonucunu karabiliriz.

    2.3 Java Uygulama Programlama Arayz

    (Java Application Programming Interface - API)

    Uygulama Programlama Arayz, eitli yetenekler sunan hazr yazlm

    bileenlerinden oluan bir derlemdir.

    Java API, eitli amalarla kullanlmak zere tasarlanm ok zengin bir

    bileen ktphanesi sunar. Java ile uygulama gelitirilirken bu

    bileenlerden faydalanlr. rnein, eer dosya ilemleri yapan bir program

    yazmak istiyorsak, Java APIde bulunan ve dosyalarla ilgili her trl ilemi

  • yapmakta kullanlan snf ve arayzleri bilmemiz gerekir. Ya da kolay

    kullanml ve zengin bir grafik kullanc arayz (Graphical User Interface -

    GUI) olan bir uygulama iin Java Swing APIyi kullanabiliriz.

    ekil 3-4te JVM ve Java API birlikte grlmektedir.

    ekil 2-4. Java Sanal Makinas, Java API ve Java Program

    Java platformunu tandktan ve Java ile nesneye ynelik uygulama

    gelitirme yaklamn rendikten sonra, kendisini gelitirmek isteyen bir

    kimsenin yapmas gereken i Java APIyi renmek olacaktr. Bileenlerin

    tamamnn renilmesi ok olas olmasa da, neler bulunduuna dair fikir

    sahibi olmak nemlidir. Bylece herhangi bir programlama gereksinimini

    karlamak zere nelerin kulllanlabilecei bilinmi olur ve zme ulamak

    kolaylar.

    Java APIde neler olduuna dair fikir edinmek iin en kolay yntem

    herhalde Java API Documentation ad ile bilinen ve bu kitabn

    yazlmakta olduu zamanda http://java.sun.com/javase/6/docs/api/

    adresinden eriilebilen HTML belgelerine bir gzatmaktr.

    Java API Documentation, www.java.sun.com adresinden indirilebilir. Java ile

    uygulama gelitirirken en sk bavurulacak belge olduundan, bu belgeyi

    bilgisayarnza indirmenizde fayda vardr.

    ekil 3-5te Java API Documentation belgelerinden rnek bir grnm

    bulunmaktadr. Grld gibi sayfa 3 ereveden olumaktadr. Sol st

    taraftaki erevede APIde bulunan paketler (packages), sol alt erevede

    http://java.sun.com/javase/6/docs/api/http://www.java.sun.com/

  • seilen pakette bulunan snf ve arayzler, sa taraftaki byk erevede

    ise sol alt ereveden seilen snf ya da arayz ile ilgili aklamalar ve o

    snf ya da arayzn yntemleri ile bunlara ait ayrntl bilgiler

    bulunmaktadr.

    ekil 2-5. Java API Documentation Belgelerinden rnek Bir Grnm

    Belgenin kullanln bir rnekle aklamaya alalm. Diyelim ki dosya

    ilemlerine gereksinim duyduumuz bir uygulama gelitiriyoruz. Diskteki

    bir dosyay ap iindeki veriler zerinde ilem yapmamz gerekiyor.

    Bununla ilgili olarak ne kullanabileceimiz hakknda az da olsa fikrimiz var

    ancak neyi nasl kullanacamz tam olarak bilmiyoruz.

    Bu durumda, Java API Documentation belgelerine bavuruyoruz. Sol st

    ereveden java.io paketini seiyoruz. Bu paket, Javada giri/k

    (input/output) ilemlerinin yaplabilmesi iin kullanlabilecek snf ve

    arayzleri iermektedir. Sol alt ereveye, paketin iindeki snf ve

    arayzlerin listesi gelir. File snfnn zerine tkladmzda, sadaki

    erevede File snfna ait bilgiler gelir. Snfla ilgili genel aklamalar

    okuduktan sonra, alt tarafta bu snfn iinde bulunan yntemlerin listesini

  • inceleyebilir ve rnein program ierisinden bir dosyann adn deitirmek

    iin renameTo adl bir yntemin kullanlacan grebiliriz.

    ekil 4-6da bu admlar grlmektedir.

    ekil 2-6. Dosya lemleri in File Snfnn ncelenmesi

    2.4 zet

    Java yalnzca bir programlama dili deil, bu dil ile yazlm programlarn

    zerinde altrld bir platformdur.

    Java programlarnn platformdan bamszlklar, farkl platformlar iin

    gelitirilmi olan Java Sanal Makineleri ile salanmaktadr.

    Java Sanal Makinesi, belli bir belirtime uygun olarak gerekletirilmi bir

    yazlmdr. Sanal bir donanm ynetir ve (32 ikillik) sanal donanm en

    fazla 4GB bellek kullanabilmektedir.

    Java platformu, Java Sanal Makinesi ile Java Uygulama Programlama

    Arayznden oluur. Uygulama Programlama Arayz, hazr yazlm

    bileenlerinin bir derlemidir.

  • Java Uygulama Programlama Arayz, Java uygulamalarnda

    kullanlabilecek snf ve arayz tanmlarn ierir. Bunlarla ilgili bilgi, Java

    API Belgelerinden edinilebilir.

  • 3 Java Dili le lgili Temel Bilgiler

    Bu blmde, Java dili ile ilgili temel bilgilere yer verilecektir. Okuyucunun

    temel programlama bilgisi olduu kabul edilecek ve deiken nedir?,

    dng nedir?... gibi konular anlatlmayacak, yalnzca bu tip temel

    yaplarn Javada nasl ifade edildiklerine hzlca baklacaktr.

    Java dili szdizimsel olarak C, C++, C# dillerine ok benzer. leler,

    ilelerin ncelikleri, deiken tanmlama ve ilk deer atama, denetim ve

    dng yaplar byk oranda ayndr. Eer bu dillerden herhangi birisini

    biliyorsanz, bu kesime ksaca bir gzatp hzlca geebilirsiniz.

    3.1 Szdizim Kurallar (Syntax Rules)

    Her programlama dilinde olduu gibi Javada da bir takm szdizim

    kurallar vardr. Szdizim kurallarna uygunluu derleyici denetler ve

    kurallara uymayan durumlar raporlar. Dolaysyla szdizim kurallarn tek

    tek aklamaya almak yerinde bir aba olmayacaktr.

    C, C++ ya da C# bilen okuyucular iin Javadaki szdizim kurallarnn bu

    dillerdekilerle hemen hemen ayn olduunu syleyebiliriz.

    3.1.1 Derleyiciler

    Derleyiciler, kaynak kodu inceleyerek bu kodun programlama dilinin

    szdizim kurallarna uygun olarak yazlp yazlmadn denetleyen, eer

    dilin kurallarna uygun olmayan durumlar belirlenirse bunlar raporlayarak

    programcya kodu dzeltmesi iin ipular veren programlardr.

    3.1.2 Whitespace karakterleri

    Kod yazlrken kullanlan baz karakterler whitespace karakterleri olarak

    adlandrlr ve derleyici tarafndan dikkate alnmaz:

    end-of-line karakteri: \n ile ifade edilir; kod yazlrken Enter tuuna her

    baslta, imlecin bulunduu yere bir end-of-line karakteri koyulur ve

  • kullanlan metin dzenleyici bu karakteri yorumlayarak imleci bir satr

    aaya indirip satr bana gtrr.

    form-feed karakteri: \f ile ifade edilir ve imleci sonraki sayfann bana

    gtrr.

    boluk karakteri: boluk ubuuna (space-bar) basld zaman oluan

    karakter, metin dzenleyici tarafndan imlecin bir karakterlik bo yer

    braklarak ilerlemesini salar

    tab karakteri: \t ile ifade edilir, allan metin dzenleyicide genellikle 4

    ya da 8 boluk karakterine karlk gelecek ekilde ayarlanabilir

    whitespace karakterlerinin derleyici tarafndan dikkate alnmamas u

    anlama gelmektedir: programc kodlama yaparken deyimler ya da

    deikenler arasnda istedii kadar boluk brakabilir, satr atlayabilir ya da

    tab tuu ile ilerleyebilir, ancak szdizim kurallarna aykr bir i yapm

    olmaz. Bununla birlikte, whitespace karakterleri kodun daha okunur

    grnmesini salamak amacyla kullanlr.

    3.2 Aklama Satrlar (Comment Lines)

    Aklama satrlar, kod ii belgeleme amacyla kullanlan ve derleyici

    tarafndan dikkate alnmayan kod kesimleridir. Bir programcnn aklama

    satr yazmak iin temel iki amac olabilir:

    Yazd kodun kritik kesimlerini aklayarak, o koda daha sonra bakan

    kimselerin (byk olaslkla kendisinin) iini kolaylatrmak: Aslnda bu

    ekilde aklama gerektiren kod, baarl bir kod deildir. nk zaten

    yazlan kodun hibir aklamaya ihtiya duyulmadan kendisini

    aklayabilmesi gerekir.

    Yazd kod ile ilgili belge oluturmak: Yazlmlarn belgelenmesi bir

    gerekliliktir. Bu belgeleme gereksinimi bazen srf mteri istiyor diye

    yerine getiriliyor olsa da, ou zaman ortaya kan rnn yaatlabilmesi

    ve hatta gelitirilebilmesi iin gerekletirilmektedir. Belgeler, gereksinim

  • belirleme ve tasarm srelerinde raporlar eklinde oluturulurken,

    kodlama srecinde kod ii belgeleme olarak ortaya kar.

    Javada aklama satrlar 3 farkl ekilde yazlr:

    3.2.1 // ile yaplan aklamalar

    Tek satrlk bir aklama yaplacaksa o satrn bana // iareti yazlr. Bir

    sonraki satra geilene kadar bu satra yazlan herey aklama olarak

    deerlendirilir ve derleyici tarafndan dikkate alnmaz. Daha doru bir

    ifade ile; // iaretinden sonra satr sonuna kadar herey aklamadr.

    Anlalaca zere bu iaretin satrn en banda olmas zorunlu deildir.

    Ancak kodlama alkanl bakmndan satr banda kullanlmas daha

    uygundur.

    rnek:

    // bu bir aklama satrdr

    int sayi = 5; // sayi deikenine 5 deeri atand.

    Kod 3-1. Tek satra yazlan aklamalar

    3.2.2 /* ... */ ile yaplan aklamalar

    Eer birden fazla satrda yazlan bir aklama varsa, her satrn bana //

    iareti koymak programcya zor gelebilir. Bunun yerine, aklama olarak

    deerlendirilmesi istenen satrlar /* ve */ iaretleri arasna alnr. Bu iki

    iaret arasnda kalan kesimler derleyici tarafndan aklama satr olarak

    kabul edilir.

    rnek:

    /* Bu birden fazla satrdan oluan bir aklamadr. Ancak bir aklamann

    bu yolla ifade edilmesi iin birden fazla satrdan olumas zorunluluu

    yoktur. */

    int sayi = 5; /* sayi deikenine 5 deeri atand. */

    Kod 3-2. Birden fazla satra yazlan aklamalar

  • 3.2.3 /** ... */ ile yaplan aklamalar

    Bir uygulama gelitirilirken kod ii belgeleme yapmak gzel bir

    programlama alkanldr. nk hem yapmakta olduunuz ii en gzel o

    ii yaparken aklayabilirsiniz, hem de aklayabildiiniz kodu anlamsnz

    demektir ve o kodu aklayarak yazdnz iin hata yapma olaslnz

    der.

    te yandan, ou zaman uygulamalarn raporlarnn oluturulmas gerekir.

    Kod yazldktan sonra kodun iine yazlan aklamalardan bir belge

    oluturarak bu belgeyi raporun sonuna eklemek programcnn ykn

    hafifletecektir. te imdi bahsedeceimiz nc yntem bu amala

    kullanlr. /** ve */ iaretleri arasna yazlan aklamalar bir takm zel

    etiketler ierebilir. Kod ii belgeleme, bu etiketleri tanyan ve etiketlerden

    faydalanarak belge reten bir aracn yardm ile belgeye

    dntrlebilmektedir.

    Bu tarzda yazlan aklama satrlarna Javadoc ad verilmektedir. Javadoc

    iin kullanlabilecek baz imler ve ne iin kullanlabilecekleri aada

    listelenmitir:

    Etiket Aklama

    @author Kodu yazan kiinin kim olduunu belirtir

    @deprecated Yntemin artk kullanmda olmadn belirtir. Baz

    uygulama gelitirme ortamlar, bu ekilde iaretlenmi

    yntemler kullanldnda programcy uyarr.

    @exception Bir yntemin frlatt aykr durumu belirtir

    @param Yntemin ald parametreleri aklamakta kullanlr

    @return Yntemden dnen deeri aklamakta kullanlr

    @see Baka bir yntem ya da snf ile balant kurar

    @since Bir yntemin ne zamandan beri var olduunu belirtir

    @throws Bir yntemin frlatt aykr durumu belirtir.

    @version Bir snf ya da yntem iin srm numaras belirtir.

    Tablo 3-1. javadoc iin kullanlan imlerden bazlar ve aklamalar

  • javadoc.exe arac, JDKnn kurulduu klasrde bin klasrnn altndadr.

    Bu ara, Java kaynak kodlarnn zerinden geerek /** .. */ iaretleri

    arasna yazlan aklama satrlarndan belge retir. Belge, Java API

    Belgeleri ile ilgili kesimde anlatld gibi HTML dili ile oluturulmaktadr.

    Aslnda Java API Belgesinin kendisi de bu yolla oluturulmu bir belgedir

    ve belki de Java APIsini kullanmak ve renmek zere kullanlabilecek en

    iyi ve kolay kullanml belgedir.

    rnek:

    package ornek;

    /**

    * @author Ouz Aslantrk - 06.Mar.2007

    *

    */

    public class AciklamaSatiriOrnegi {

    /**

    * Verilen saynn karekkn bularak dndrr.

    * Saynn sfrdan kk olmadn varsayar.

    *

    * @param sayi Karekk alnacak say

    * @return Saynn karekk

    */

    public double karekok(double sayi) {

    double kkok = 0;

    // burada karekk bulma algoritmasnn altn kabul edelim

    return kkok;

    }

    }

    Kod 3-3. javadoc ile yaplan aklamalar

    Konsolda AciklamaSatiriOrnegi.java dosyasnn bulunduu klasre

    gidip aadaki satr yazarsak, Docs adl bir klasr oluturulacak ve ad

    verilen .java dosyas iin HTML belgeleri oluturulacaktr.

  • javadoc d Docs AciklamaSatiriOrnegi.java

    Kod 3-4. Javadoc ile belge oluturma

    Aada bu belgeye ait bir grnm bulunmaktadr:

    Kod 3-5. Aklama satrlarndan oluturulan javadoc belgesi

    3.3 Temel Trler (Primitive Types)

    Javada temel trler tabloda grld kadardr. Herbir temel trn

    uzunluunun ve alabilecei en byk ve en kk deerlerin belli olmas

    programclarn iini kolaylatrmaktadr.

    Tr kil

    says

    En kk deer En byk deer Varsaylan

    deer

    byte 8 -27 27-1 0

  • short 16 -215 215-1 0

    int 32 -231 231-1 0

    long 64 -263 263-1 0

    float 32 -3.4 x 1038, 7 hane 3.4 x 1038, 7 hane 0.0

    double 64 -1.7 x 10308, 15 hane 1.7 x 10308, 15 hane 0.0

    char 16 - - Boluk

    krakteri

    boolean 0 false true false

    Nesne

    referans

    32 - - null

    Tablo 3-2. Javada Temel Trler

    Temel trlerin varsaylan deerleri grld gibi belirlidir. Yine de

    deikenler tanmlanrken ilk deer olarak bu deerlerin atanmas kodun

    okunurluunu arttran ve olas hatalarn nne geen iyi bir programlama

    alkanldr.

    3.4 Deiken Tanmlama ve lk Deer Atama (Variable

    Declaration and Initialization)

    Deiken, veri saklamak iin kullanlan bellek alanlarna verilen addr. Her

    deikenin ad, adresi, tr ve deeri vardr. Deiken tanm aadaki

    ekilde yaplr:

    deikenin_tr deikenin_ad;

    Ayn trden birden fazla deiken tanmlanacaksa, bunlar , iareti ile

    ayrlarak yazlabilirler.

    deikenin_tr deikenin_ad_1, deikenin_ad_2;

    Aada baz deiken tanmlar grlmektedir:

    short sayi;

    int sayi1, sayi2;

    double gercelSayi1,

    gercelSayi2;

    Kod 3-6. Deiken tanmlama

  • Bir deikene ilk deer atamak iin, deiken tanmnn hemen yannda

    atama ileci kullanlabilir:

    byte byteTipindeDegisken = -8;

    char birinciKarakter = a, ikinciKarakter = z;

    float gercelSayi = 4.35;

    Kod 3-7. Deikene ilk deer verme

    Javada bir takm isimlendirme kurallar/gelenekleri (Naming Conventions)

    bulunmaktadr. Bu kurallara gre deiken adlar kk harfle balar, birden

    fazla szckten oluuyorsa, birinci szckten sonraki szcklerin yalnzca ilk

    harfleri byk dierleri kk yazlr: byteTipindeDegisken, birinciKarakter

    deikenlerinde olduu gibi.

    Bir deiken tanmlarken, deiken adnn zenle seilmesi ve deikenin

    yapaca ii belirtmesi gzel bir programlama alkanldr.

    3.4.1 Deikenin Tanm Alan (Scope)

    ki kme parantezi ({ ve }) arasnda kalan kod kesimine blok denir.

    { iareti bir kod blou balatr ve } iareti balatlan kod blounu bitirir.

    Herhangi bir deiken, tanmland kod blou iinde fiziksel olarak vardr

    ve o kod blou iine yazlan kod kesimlerinden eriilebilirdir. Bu alana

    deikenin tanm alan denir.

    Bir blok iinde ayn deiken ad birden fazla kez kullanlamaz.

    rnek:

    int n = 5;

    System.out.println("n: " + n); // n: 5

    {

    int k = 3;

    System.out.println("k: " + k); // k: 3

    n = 8;

    } // k buraya kadar tanml, buradan sonra eriilemez

    System.out.println("n: " + n); // n: 8

    Kod 3-8. Kod blou ve tanm alan rnei

  • 3.5 leler (Operators)

    3.5.1 Aritmetik ileler:

    le Ad Gsterimi rnek

    Atama (assignment) = a = 5;

    Toplama + a = a + b;

    karma - a = a b;

    arpma * a = a * b;

    Blme / a = a / b;

    Mod Alma % a = a % 3;

    Tablo 3-3. Aritmetik ileler

    3.5.2 Birleik Aritmetik leler:

    le Ad Gsterimi rnek

    Toplama ve atama += a += b; // a = a + b;

    karma ve atama -= a -= b; // a = a - b;

    arpma ve atama *= a *= b; // a = a * b;

    Blme ve atama /= a /= b; // a = a / b;

    Mod alma ve atama %= a %= b; // a = a % b;

    Tablo 3-4. Birleik Aritmetik leler

    3.5.3 Arttrma ve Azaltma leleri:

    le Gsterimi rnek

    Arttrma (increment) ++ a++; // post-increment

    ++a; // pre-increment

    Azaltma (decrement) -- a--; // post-decrement

    --a; // pre-decrement

    Tablo 3-5. Arttrma ve Azaltma leleri

  • Arttrma ve azaltma ileleri deikenin nne veya sonuna yazlabilir.

    Nereye yazldklarna bal olarak ilelerin nasl iletilecei deiir:

    Deikenin sonuna yazlrsa:

    int a = 3, b = 5, c;

    c = a++ + b;

    System.out.println(a: + a); // a: 4

    System.out.println(b: + b); // b: 5

    System.out.println(c: + c); // c: 8

    Kod 3-9 Arttrma ilecinin deikenin sonuna yazlmas rnei

    Deikenin nne yazlrsa:

    int a = 3, b = 5, c;

    c = ++a + b;

    System.out.println(a: + a); // a: 4

    System.out.println(b: + b); // b: 5

    System.out.println(c: + c); // c: 9

    Kod 3-10 Arttrma ilecinin deikenin nne yazlmas rnei

    rneklerde de grld gibi, her iki kod kesiminde de ann deeri

    arttrma ileci ile 1 artmaktadr. Ancak ilk rnekte, ann deeri

    arttrlmadan nce (ann deeri 3 iken) aktarma ilecinin sa tarafndaki

    ilem gerekletirilmekte ve buna bal olarak cnin deeri 8 olmakta;

    ikinci rnekte ise ann deeri 1 arttrldktan sonra sa taraftaki ilem

    gerekletirilmekte ve buna bal olarak cnin deeri 9 olmaktadr. Baka

    bir deyile, her durumda ann deeri arttrma ileci ile 1 arttrlacaktr

    ancak bunun nce mi sonra m olacana gre cnin deeri deimektedir.

    Eer bu iletim kafanz kartrdysa, ++a ya da a++ yerine bir nceki ya da

    bir sonraki satra a += 1 yazarak kodun nasl altndan emin

    olabilirsiniz. Programlama dilindeki her ayrnty kullanmanz gerekmez,

    nemli olan doru, etkin ve okunur kod yazmaktr.

  • 3.5.4 likisel (relational) ileler:

    le Ad Gsterimi rnek

    Eittir == a == b

    Eit deildir != a != b

    Byktr > a > b

    Kktr < a < b

    Byk ya da eittir >= a >= b

    Kk ya da eittir 10

    deil (not) ! !(a > 0)

    Tablo 3-7. Mantksal leler

  • 3.5.6 lelerin ncelikleri:

    Verdiimiz ilelerle ilgili ncelik kurallarn basit ifadelerle aklayalm.

    Tekil ilelerin ikili ilelere gre ncelii vardr.

    Aritmetik ilelerde arpma ve blme ilelerinin toplama ve karma

    ilelerine gre ncelii vardr. Ayn ncelikli ileler soldan saa

    srayla iletilir.

    Aritmetik ileler ilikisel ilelere gre nceliklidir.

    likisel ileler soldan saa srayla iletilir.

    likisel ileler mantksal ilelere gre nceliklidir.

    En dk ncelikli ile atama ilecidir.

    Yukardaki kurallara gre aadaki kod kesimini iletelim:

    int a = 3, b = 5, c;

    c = a * ++b / 5 - 12 * a + b;

    System.out.println("c: " + c); // c: -27

    boolean bool = a + b < a * c && a + b >= b + a;

    System.out.println("bool: " + bool); // bool: false

    Kod 3-11. le ncelikleri rnei

    ncelikler parantez kullanlarak deitirilebilir. Bir ifade, baz ksmlar

    parantezler arasna alnarak dzenlendiinde nce parantezlerin ii iletilir.

    Kod 3-10da grlen kod kesimini, ncelikleri parantezlerle belirleyecek

    ekilde yeniden yazp iletelim:

    int a = 3, b = 5, c;

    c = (a * ++b) / (5 - 12) * (a + b);

    System.out.println("c: " + c); // c: -18

    boolean bool = (a + b) < (a * c) && (a + b) >= (b + a);

    System.out.println("bool: " + bool); // bool: false

    Kod 3-12. Parantezler ile ncelik belirleme rnei

    Grld gibi c deikeninin deerinin hesapland satrda ncelikleri

    deitirerek farkl bir deer bulunmasn saladk.

  • bool deikeninin deerinin belirlendii satrda ise ncelikleri

    deitirmedik. Ancak kodun daha kolay okunabilir olmasn saladk.

    ncelik kurallar bilinse de karmak bir deyimin okunabilirlii ou zaman

    olduka dktr. Parantez, ncelikleri deitirmek zere kullanlabildii

    gibi, bazen srf kodun okunabilirliini arttrmak iin kullanlr.

    Kodun okunurluunu arttrmak iin parantezleri kullanmak gzel bir

    programlama alkanldr.

    Bu blmde listelenen ileler, Java dilindeki btn ileler deildir. Ancak

    vereceimiz temel bilgiler asndan bu ileler yeterlidir. lelerle ilgili

    daha ayrntl bilgi iin Java referans belgelerine bavurabilirsiniz.

    3.6 Denetim Deyimleri (Control Statements)

    Denetim deyimleri, bir takm koullara gre programn aknn

    belirlenmesini salayan programlama geleridir. Bir denetim deyimi,

    iletilecek bir sonraki koulun hangisi olacan belirlemek zere bir koulu

    denetler.

    3.6.1 if else deyimi

    u ekilde yazlr:

    if (koul ifadesi) {

    koulun doru olmas durumunda iletilecek kod kesimi

    }

    else {

    koulun doru olmamas durumunda iletilecek kod kesimi

    }

    if ve else deyimleri ayrlm szcklerdir. if deyiminin denetlemesi

    istenen koul ifadesi parantez iinde yazlmak zorundadr. Koul ifadesini

    izleyen kme parantezi ( { ), if blounun balangcdr. Bu parantez

    kapatlana ( } ) kadarki kod kesimi, koulun doru olmas durumunda

    iletilecek kesimdir. if blou kapatldktan hemen sonra else deyimi gelir

    ve else blou balar. else blou, koulun doru olmamas durumunda

  • iletilir. Ksaca, koula bal olarak ya if blou ya da else blou

    iletilecektir. if ve else bloklarnn arasna herhangi bir deyim giremez.

    rnek:

    int a = 3, b = 5;

    System.out.println("Denetimden nceki kod kesimi");

    if (a > b) {

    System.out.println("a, b'den byktr.");

    }

    else {

    System.out.println("a, b'den byk deildir.");

    }

    System.out.println("Denetimden sonraki kod kesimi");

    Kod 3-13. if deyimi rnei - 1

    kt:

    Denetimden nceki kod kesimi

    a, b'den byk deildir.

    Denetimden sonraki kod kesimi

    else blounun yazlmas zorunlu deildir, ancak if blou olmadan else

    blou yazlamaz. Baka bir deyile, elsesiz if olabilir ancak tersi doru

    deildir. Bazen yalnzca koulun doru olmas durumunda iletmek

    istediimiz bir kod kesimi vardr ancak yanl olmas durumunda iletilecek

    zel bir kod yoktur. Bu durumda yalnzca if blounu yazmak yeterlidir.

    rnek:

    int a = 3, b = 5;

    System.out.println("Denetimden nceki kod kesimi");

    if (a > b) {

    System.out.println("a, b'den byktr.");

    }

    System.out.println("Denetimden sonraki kod kesimi");

    Kod 3-14. if blou rnei - 2

    kt:

    Denetimden nceki kod kesimi

    Denetimden sonraki kod kesimi

  • Eer if ya da else bloklarndan herhangi birisi tek satrdan oluuyorsa,

    { } arasna alnmayabilir. if deyiminden hemen sonra gelen ilk satr if

    deyimine, else deyiminden sonra gelen ilk satr da ayn ekilde else

    deyimine bal olarak iletilir.

    rnek:

    int a = 3, b = 5;

    System.out.println("Denetimden nceki kod kesimi");

    if (a > b)

    System.out.println("a, b'den byktr.");

    else

    System.out.println("a, b'den byk deildir.");

    System.out.println("Denetimden sonraki kod kesimi");

    Kod 3-15. if blou rnei - 3

    Gerek kodun okunurluunun kaybolmamas, gerekse dalgnlkla yaplabilecek

    hatalarn nne geilebilmesi asndan, if ya da else bloklarn tek

    satrdan olusalar bile { } arasna almak iyi bir programlama alkanldr.

    Bir if blounun iine baka if deyimi ya da deyimleri de gelebilir. Burada

    herhangi bir snr yoktur. Algoritmaya gre, iie if deyimleri yazlabilir.

    rnek:

    int a = 7, b = 3, c = 1;

    if (a > b) {

    System.out.println("a, b'den byktr.");

    if (a > c) {

    System.out.println("a, c'den de byktr.");

    }

    else {

    System.out.println("a, c'den byk deildir.");

    }

    }

    Kod 3-16. ie if deyimleri

    kt:

    a, b'den byktr.

    a, c'den de byktr.

  • 3.6.2 if else if deyimi

    u ekilde yazlr:

    if (1. koul ifadesi) {

    1. koulun doru olmas durumunda iletilecek kod kesimi

    }

    else if (2. koul ifadesi) {

    2. koulun doru olmamas durumunda iletilecek kod kesimi

    }

    ... // istenildii kadar else if blou

    else {

    hibir koulun doru olmamas durumunda iletilecek kod kesimi

    }

    if - else if deyimleri, bir koulun salanmad durumda dier koul

    ya da koullarn denetlenmesini salayan bir yapdadr. Denetlenen

    koullardan herhangi birisinin sonucu mantksal doru olursa, o kod blou

    iletilir ve programn ak en sonraki else blounun bitimine sapar. Hi

    bir koul doru deilse, o zaman else blou iletilir.

    else blounun yazlmas zorunlu deildir.

    rnek:

    int a = -1;

    System.out.println("Denetimden nceki kod kesimi");

    if (a > 0) {

    System.out.println("a, 0'dan byktr.");

    }

    else if (a < 0) {

    System.out.println("a, 0'dan kktr.");

    }

    else {

    System.out.println("a'nn deeri 0'dr.");

    }

    System.out.println("Denetimden sonraki kod kesimi");

    Kod 3-17. if else if deyimi rnei

    kt:

  • Denetimden nceki kod kesimi

    a, 0'dan kktr.

    Denetimden sonraki kod kesimi

    ktda grld gibi, kod bloklarndan yalnzca birisi iletilmitir.

    3.6.3 switch deyimi

    switch deyimi, if-else-if deyimleri ile yazlabilecek bir kod kesimini

    daha basite yazmay salayan, bir ifadenin deerine gre dallanmay

    salayabilen bir deyimdir.

    Aadaki gibi yazlr:

    switch (ifade) {

    case deger1:

    ifadeler;

    break;

    case deger2:

    ifadeler;

    break;

    ....

    case degerN:

    ifadeler;

    break;

    default:

    ifadeler;

    }

    switch deyiminden sonra parantez ierisine bir ifade yazlr. Bu ifade, tek

    bana bir deiken olabilecei gibi, herhangi bir matematiksel ilem ya da

    ilev ars da olabilir. case satrlar, ifadenin deerini denetler. Herhangi

    bir case satrnda eitlik yakalanabilirse, o case satr iletilir. break

    deyimi, denetim yapsndan kmaya yarayan deyimdir ve bir case satr

    iletildikten sonra dierlerinin iletilmemesini salar. Ancak yazlmas

    zorunlu deildir. default ise, hibir case satrnda ifadenin deerinin

    yakalanamamas durumunda iletilmek istenen kod kesiminin kodlanaca

    yerdir, yazlmas zorunlu deildir.

    int ay = 5;

  • System.out.println("switch'ten nceki kod kesimi");

    switch (ay) {

    case 1: System.out.println("Ocak"); break;

    case 2: System.out.println("ubat"); break;

    case 3: System.out.println("Mart"); break;

    case 4: System.out.println("Nisan"); break;

    case 5: System.out.println("Mays"); break;

    case 6: System.out.println("Haziran"); break;

    case 7: System.out.println("Temmuz"); break;

    case 8: System.out.println("Austos"); break;

    case 9: System.out.println("Eyll"); break;

    case 10: System.out.println("Ekim"); break;

    case 11: System.out.println("Kasm"); break;

    case 12: System.out.println("Aralk"); break;

    default: System.out.println("Ay 1 - 12 aralnda deil");

    }

    System.out.println("switch'ten sonraki kod kesimi");

    Kod 3-18. switch deyimi rnei

    kt:

    switch'ten nceki kod kesimi

    Mays

    switch'ten sonraki kod kesimi

    switch deyimi kullanlrken break deyimlerinin dikkatli kullanlmas gerekir.

    break deyiminin unutulmas ya da yazlmamas durumunda, case satr

    iletildikten sonra switch deyiminin sonuna saplmayacak, ileyi bir

    sonraki case satrndan devam edecektir. if-else if kod bloklar, switch

    bloklarna oranla hata yapmanza daha az yatkndr.

    rnek:

    int ay = 5;

    switch (ay) {

    case 12:

    case 1:

    case 2: System.out.println("K"); break;

    case 3:

    case 4:

  • case 5: System.out.println("lkbahar"); break;

    case 6:

    case 7:

    case 8: System.out.println("Yaz"); break;

    case 9:

    case 10:

    case 11: System.out.println("Sonbahar"); break;

    default: System.out.println("Ay 1 - 12 aralnda deil");

    }

    Kod 3-19. break kullanlmayan switch deyimi rnei

    kt:

    lkbahar

    3.7 Dngler (Loops)

    Dngler, belirli bir koul saland srece tekrarlanmas gereken iler

    iin kullanlan programlama geleridir. Javada for, while ve do-while

    olmak zere 3 adet dng deyimi bulunmaktadr.

    Herhangi bir algoritmada hangi dngnn kullanlmas gerektii ile ilgili

    kesin kurallar yoktur. Dngler uygun deiiklikler ile ayn ii yapacak

    ekilde kodlanabilirler. Ancak genel eilim, ka kere dnecei belli

    olmayan, koulun bir girdiye (rnein bir dosyadan okunan ya da

    kullancnn girdii deerlere) gre denetlendii durumlarda while ya da

    do-while dngsn, diziler gibi, tekrar saysnn belli olduu durumlarda

    for dngsn kullanmak ynndedir.

    3.7.1 while dngs

    u ekilde yazlr:

    while (koul ifadesi) {

    deyimler;

    }

    while szc ile koulun iine yazld parantezler zorunludur. Koul

    saland srece while blounun iindeki kod kesimi iletilecektir.

    rnek:

  • int i = 1;

    while (i

  • do-while dngsnde, dng blou iindeki kod kesimi en az bir kez

    mutlaka iletilecektir. nk nce dng blou iletilip sonra koul

    denetlenmektedir. while dngsnde ise nce koula baklp sonra dng

    blou iletildii iin, dngye hi girilmemesi olasdr.

    3.7.3 for dngs

    u ekilde yazlr:

    for (ilk_deger_atama; koul; her_dnte) {

    deyimler;

    }

    Bu yazlta for szc, ilk_deger_atama, koul ve her_dnte

    alanlarnn iine yazld parantezler ve ; (noktal virgl) iaretlerinin

    yazlmas zorunludur.

    ilk_deger_atama: Dngye ilk defa girilirken iletilecek kod kesimidir.

    Yalnzca bir kez iletilir. Bo braklabilir ya da birden fazla deyimden

    oluabilir. Birden fazla deyimden oluuyorsa, deyimler , (virgl) iareti

    ile birbirlerinden ayrlr. Genellikle dng deikeninin ilk deerinin

    verilmesi iin kullanlr ve tek deyim ierir.

    koul: Dng blou iletilmeden nce denetlenecek koul ifadesini ierir.

    while dngsnde olduu gibi, nce koul denetlenir, koulun mantksal

    doru olmas durumunda dng blou iletilir.

    her_dnte: Dng blou iletildikten sonra, koul yeniden

    denetlenmeden hemen nce iletilecek kod kesimidir. Dng blounun her

    iletilmesinden sonra bir kez iletilir. Bo braklabilir ya birden fazla

    deyimden oluabilir. Birden fazla deyimden oluuyorsa, deyimler ,

    (virgl) iareti ile birbirlerinden ayrlr. Genellikle dng deikeninin

    deerinin gncellenmesi iin kullanlr ve tek deyim ierir.

    rnek:

    int i;

    for (i = 1; i

  • }

    Kod 3-22. for dngs rnei - 1

    kt:

    1. kez iletildi..

    2. kez iletildi..

    3. kez iletildi..

    4. kez iletildi..

    5. kez iletildi..

    Ayn dng u ekilde de yazlabilir:

    for (int i = 1; i

  • System.out.println("i: " + i + ", j: " + j);

    }

    Kod 3-25. for dngs rnei - 4

    kt:

    i: 1, j: 10

    i: 2, j: 9

    i: 3, j: 8

    i: 4, j: 7

    i: 5, j: 6

    Ayn dng u ekilde de yazlabilir:

    int j = 10;

    for (int i = 1; i

  • 4 Uygulama Gelitirme Ortam

    Java ile uygulama gelitirmek iin eitli Tmleik Uygulama Gelitirme

    Ortam (Integrated Development Environment - IDE) yazlmlar

    kullanlmaktadr. Ancak bu ortamlarn birok ayrnty kullancdan

    gizleyerek alyor olmalar, platformu ve dili yeni renen kiilerin

    gerekte neler olup bittiini bilmeden kod yazabilmeleri sonucunu

    dourmaktadr. Tamamen yabanc bir ortamda fazla birey bilmeden

    alr programlar oluturabilmek balangta cazip gelse de, renme

    eylemi asndan grnd kadar faydal deildir. Ama renmek

    olduuna gre nce byle bir ara olmadan ilerin nasl yaplacan

    grmek daha doru olacaktr. Sonraki aamada ise daha hzl ve kolay

    alabilmek iin elbette uygulama gelitirme ortamlarndan faydalanmak

    gerekir.

    4.1 JDK ve JRE

    JDK, Java Development Kit szcklerinin ba harflerinden oluturulmu bir

    ksaltmadr. Java programlarnn gelitirilip altrlabilmesi iin gerekli

    ara ve ktphaneleri ieren paket JDK ad ile sunulmaktadr.

    JRE ise Java Runtime Environment szcklerinin ba harflerinden oluur.

    Java programlarn altrmak (gelitirmek iin deil!) iin gerekli

    bileenleri ierir.

    Eer bilgisayarnzda Java ile program gelitirmeyecek, yalnzca Java

    programlarn altracaksanz, bilgisayarnzda JRE bulunmas yeterlidir.

    Ancak eer kod gelitirecekseniz, JDKya gereksinim duyarsnz.

    JDK kurulum paketinin iinde JRE de gelmektedir. Yani ikisini ayr ayr

    indirip kurmanza gerek yoktur.

    http://java.sun.com/javase/downloads/index.jsp adresinden JDKy

    indirmek iin gerekli balantya tklayn. Bu balant sizi farkl platformlara

    ait JDKlar indirebileceiniz sayfaya gtrecektir. rneklerimizi

    WindowsXP zerinde yazacamz iin biz jdk-6-windows-i586.exe

    http://java.sun.com/javase/downloads/index.jsp

  • (kitabn yazlma zamannda JDKnn bu srm var) dosyasn indirdik.

    Ancak siz kendi kodlarnz hangi platformda yazacaksnz, ona uygun

    JDKy seebilirsiniz.

    JDK kurulum dosyasna ift tkladnzda iki ayr kurulum balatlacaktr.

    Bunlardan ilki JDKnn kurulumudur. Varsaylan kurulumu gerekletirebilir

    ya da kendinize gre zelletirme yaparak hedef klasr deitirebilir,

    demolar ve kaynak kodlar kurmamay seebilirsiniz.

    kinci kurulum ise Public JRE adl bir programa aittir. Bu kurulumu

    varsaylan haliyle gerekletiriniz. Public JRE, makinanzda JVM ortamn

    oluturur ve JVM gereksinimi olan dier programlarnza da bu ortamdan

    faydalanma olana salar.

    JDKy makinanza kurduktan sonra, ncelikle evre deikenlerini

    gncellemeniz gerekir:

    PATH deikeni: Gncellenmesi gereken evre deikenlerinden ilki PATH

    deikenidir. JDKy kurduunuz klasrn altndaki bin klasrn PATH

    deikenine tanmlamalsnz. Bunu WindowsXPde u ekilde

    yapabilirsiniz:

    Balat (Start) -> Ayarlar (Settings) -> Denetim Masas (Control

    Panel) -> Sistem (System) penceresini an.

    Gelimi (Advanced) sekmesine gelin.

    evre Deikenleri (Environment Variables) tuuna tklayn.

    Alttaki Sistem Deikenleri (System variables) penceresinde PATH

    adl deikeni bulup Dzenle (Edit) tuuna tklayn.

    Bu deikenin iinde tanml deerler varsa bunlar deitirmeyin, en

    sona gidip ; yazdktan sonra JDKy kurduunuz klasrn adn

    buraya ekleyin.

    PATH deikenine bir klasr eklendii zaman, eklenen klasrn altndaki

    dosyalar bilgisayarn herhangi bir klasrnden eriilebilir hale gelir.

    Bylece bir alma klasrnde alrken JDKnn bin klasrnn altnda

  • bulunan aralar rahata kullanabilirsiniz. Bu aralardan bazlarna hzlca

    bakalm:

    javac.exe: Java programlarn derlemek iin kullanlr.

    java.exe: Derlenmi Java programlarn altrmak iin kullanlr.

    javadoc.exe: Java kaynak kodlarndaki kod ii belgelemeyi

    kullanarak belge oluturmak iin kullanlr.

    appletviewer.exe: Applet kodlarn altrmak iin kullanlr.

    javap.exe: Derlenmi bir snf dosyasnn iinde neler olduunu

    grmek iin kullanlr.

    jar.exe: Java programlarn oluturan dosyalar sktrarak

    paketlemek ya da bu paketleri amak iin kullanlr. zip biiminde

    (format) dosyalar retebilir.

    CLASSPATH deikeni: Gncellenmesi gereken bir dier evre deikeni

    ise CLASSPATH deikenidir. Eer evre deikenleri arasnda CLASSPATH

    deikeni tanmlysa bunu ya silin ya da ieriini yalnzca . olacak ekilde

    gncelleyin.

    Baz programlar PATH deikenine kendi kurulumlar ile birlikte gelen JDK

    veya JREyi eklerler. Bu durumda PATH deikeninin iinde farkl JDK

    srmlerine ait olan ve ; iaretiyle ayrlm birden ok tanmlama

    bulunabilir. Bu ise Java programlarn derleyememenize ya da

    altramamanza neden olabilir. Eer PATH deikeninde yle tanmlar

    varsa silin.

    4.2 Java ile ilk program

    Bu ksmda yazlan programlarda henz anlatmadm baz deyimler ve

    anahtar szckler kullanacam. Bunlar kullanmamn nedeni zorunlu

    olmam. nk Java ile programlama yaparken uymamz gereken baz

    kurallar var. Ancak henz bu kurallardan bahsetmediim iin, yazdm

    programlarn bu ksmlarn aklamayacak, imdilik bunlar birer

  • programlama kalb olarak renmenizi isteyeceim. Daha sonra ilgili

    konular aklanrken bu konulara geri dnecek ve gerekli aklamalar

    yapacam.

    Bir programlama dili renirken, ncelikle kendinize bir alma alan

    oluturmakta fayda olabilir. rnein C:\calisma gibi bir klasr oluturup

    yazdnz btn programlar bunun altnda aacanz alt klasrlerde

    saklayabilirsiniz. Ben de buradaki rneklerde C:\calisma adl klasr

    kullanacam.

    4.2.1 lk program

    Aada ekrana lk Java programmz yazdran basit bir programn

    kaynak kodunu grebilirsiniz.

    public class IlkProgram {

    public static void main(String[] args) {

    System.out.println("lk Java programmz..");

    }

    }

    Kod 4-1. lk Java program

    Bu kaynak kodu herhangi bir metin dzenleyici ile (rnein Notepad ile)

    yazp IlkProgram.java adl bir dosyaya kaydediniz. Dikkat ederseniz,

    kaynak kodu iine yazdm dosya ile kodun bandaki snf ad

    (IlkProgram) ayn ve byk-kk harf duyarl (case-sensitive). Yani

    dosyann adn rnein ilkprogram.java yapmamalsnz.

    Kural: Java snfnn ad ile bu snfn kaydedildii dosyann ad byk-kk

    harf duyarl olacak ekilde AYNI olmaldr!

    4.2.2 Derleme

    IlkProgram.java dosyasn C:\calisma altna kaydettik. imdi bu

    program derlemek iin konsolu ayoruz.

    Konsolu amak iin Balat (Start) -> altr (Run) mensn seip buraya

    cmd yazp Enter tuuna basabilir ya da Balat (Start) -> Donatlar

    (Accessories) -> Komut stemi (Command Propmt) mensn seebilirsiniz.

  • Konsolda C:\calisma klasrne gidiyoruz: cd c:\calisma

    imdi programmz derliyoruz: javac IlkProgram.java

    ekil 4-1. IlkProgram.java dosyasnn derlenmesi

    ekilde grld gibi program derlendikten sonra IlkProgram.class adl,

    byte-kod ieren Snf Dosyas (Class file) olutu. Eer herhangi bir

    szdizim hatas olsayd derleme ilemi baarsz olacak ve snf dosyas

    olumayacakt. rnein, eer kaynak kodu ieren dosyay

    ilkprogram.java ad ile (snf ad ile dosya ad ayn olmayacak ekilde)

    kaydetseydik bir derleme hatas alacaktk ve snf dosyas olumayacakt:

    ekil 4-2. ilkprogram.java dosyasnn derlenmesi

    4.2.3 altrma ve main yntemi

    Program baar ile derlediimize gre artk altrabiliriz. Ancak

    altrmadan nce programn nasl alacana bir bakalm.

    Derlenmi bir snf dosyas, eer iinde

  • public static void main(String[] args) {

    ....

    }

    eklinde yazlm bir yntem varsa altrlabilir bir dosyadr. Bu dosyay

    altrdmz zaman (az sonra nasl altracamz greceiz), program

    main ynteminin ilk satrndan almaya balar.

    rneimizde, main ynteminin iinde yalnzca bir satr kod bulunuyor:

    System.out.println(lk Java programmz..)

    System.out.println() yntemi, iaretleri arasnda verilen dizgiyi

    ekrana yazdran bir yntemdir. Dolaysyla programmz altrdmzda

    ekranda

    lk java programmz..

    yazmasn bekliyoruz.

    Bir snf dosyasn altrmak iin konsolda

    java IlkProgram

    yazp Enter tuuna basmamz gerekiyor. Dikkat ederseniz,

    java IlkProgram.class

    yazmyoruz! java IlkProgram ifadesi ile JVMye hangi snf altrmak

    istediimizi belirtiyoruz. JVM, adn verdiimiz IlkProgram adl snf Snf

    Ykleyici grevi ile bellee ykleyip, bu snfn iindeki main yntemini

    iletmeye balyor. Burada, main ynteminin zel bir yntem olduunu,

    altrlmak istenen bir snf dosyasnda JVM tarafndan aranan bir yntem

    olduunu ve bulunabilmesi iin de aynen burada yazld ekilde yazlmas

    gerektiini syleyelim. Baka bir deyile, eer yazdmz snf altrmak

    istiyorsak, o snfn iinde

    public static void main(String[] args)

    adl bir yntem olmas gerekiyor.

    main yntemi yazlrken, args yerine baka herhangi birey yazlabilir.

    Ancak genellikle args szc kullanlr ve bu szck arguments

  • szcnn ksaltmasdr. arguments ile ifade edilen, snf altrlrken

    JVM tarafndan bu snfa verilen argmanlardr. Bunula ilgili daha ayrntl

    bilgiyi daha sonra vereceiz.

    Aada programn altrln grebilirsiniz:

    ekil 4-3. IlkProgram snfnn altrlmas

    Eer java IlkProgram.class yazarsak ne olacana da bakalm:

    ekil 4-4. IlkProgram snfnn hatal altrlmas

    Grld gibi bir hata olutu ve programmz altrlamad. imdilik

    programn almadn grmekle yetinelim ve hatann ne olduu ile ilgili

    ayrntl bilgiyi sonraya brakalm.

    4.3 Eclipse Platformu

    Java programlarnn gelitirilmesi ve altrlmas iin JDKnn nasl

    kullanlabileceini grdk. JDK, temelde Java programlarnn

    gerekletirilmesi iin yeterli olsa da byk uygulamalarn daha hzl ve

    kolay gelitirilebilmesi iin birok tmleik uygulama gelitirme ortam

    bulunmaktadr. Bu ortamlar hem kolay kullanlmalar sayesinde, hem de

    sunduklar birok ara yardm ile programcnn iini kolaylatrr ve

    azaltrlar.

  • Bu ksmda, birok cretli rnn arasndan syrlmay baarm, ak

    kaynak kodlu ve cretsiz bir uygulama gelitirme platformu olan Eclipse

    Platformuna hzl bir bak atlacaktr.

    Bir teknoloji, programlama dili.. vb renirken, nce hibir ara kullanmadan

    ilerin nasl yaplabildiini renin. Sonra arac kullanarak bu ileri kolay

    yapmann rahatln grn. Bylece hem kullandnz aracn size ne

    getirdiini daha kolay farkedersiniz, hem de herhangi bir baka arala

    alabilecek bilgi birikimine sahip olursunuz. Sonuta btn aralar, o

    aralar kullanlmadan da yaplabilecek olan ileri daha kolay yapmann

    yollarn sunarlar. Siz neler olup bittiini bilirseniz hangi arala altnzn

    bir balaycl ve nemi kalmaz.

  • 5 Java ile Nesneye Ynelik Programlama

    Bu blmde NYP kavramlar zerinde duracak, bu kavramlarn Javada

    nasl gerekletirildiine bakacaz.

    5.1 Snf Tanmlar

    Snf ve nesne kavramlarndan daha nce bahsetmitik. Snf, bir grup

    nesnenin ortak zellik ve davranlarn ieren tanm, nesne ise bu tanma

    gre oluturulmu fiziksel bir varlkt. NYP ise bir nesnenin baka bir

    nesneye ileti gndermesi, iletiyi alan nesnenin bu iletiye uygun davran

    sergileyerek kendi durumunda bir deiiklik yapmas eklinde

    gerekletiriliyordu (Bkz: Nesneye Ynelik Programlama).

    Grld gibi, nesnelerimizi oluturabilmek iin nce o nesnelerin ait

    olduklar snflar tanmlamamz gerekiyor. Snf tanmlarnn iine zellikler

    ve davranlar yazacaz.

    rnek olarak Zaman adl bir snf tanm yapalm. Zaman snfmzn saat,

    dakika ve saniye adl zellikleri ile ilerle() adl bir davran olsun. saat,

    dakika ve saniye zelliklerini, Zaman snfna ait bir nesnenin durumunu

    oluturacak tamsay deerler, ilerle() davrann ise bu nesneye ilerle

    iletisi gnderildiinde, o nesneyi bir saniye sonrasna gtren bir davran

    olarak dnelim.

    Snf tanm yaplrken, zellikler snfn iine deikenler olarak,

    davranlar ise ilevler olarak kodlanr.

    zellik (property) NYP balamnda, nesnenin durumunu oluturan, nesnenin

    ait olduu snfn iine kodlanm herbir deikene verilen isimdir. zellik,

    Java balamnda nitelik (attribute) olarak adlandrlr.

    Davran (behaviour) NYP balamnda, nesnenin durumunda deiiklik

    yapabilen, nesnenin ait olduu snfn iine kodlanm herbir ileve verilen

    isimdir. Davran, Java balamnda yntem (method) olarak adlandrlr.

  • Javada Yntemler

    Javada yntemler aynen Cdeki ilevler gibi yazlr. Ksaca hatrlayalm:

    Yntemlerin belirli bir biime uygun yazlmalar gerekir. Bu biim u

    ekildedir:

    tr yntemAdi(parametreListesi) {

    }

    tr: Yntemin dndrecei deerin trdr. rnein verilen gerel saynn

    karekkn bulup dndren bir yntem yazacaksak, yntemden geriye

    dnecek deerin tr gerel say tipinde olacaktr. O zaman bu alana gerel

    say trn ifade eden double yazarz. Eer yntemin geriye herhangi bir

    deer dndrmesi beklenmiyorsa, bu alana deer dnmeyeceini belirtmek

    zere void yazlr.

    yntemAdi: Ynteme verilen addr. Yntem ad, yntemin ne i yaptn

    ifade edecek ekilde zenle seilmelidir. Bylece hem kodun okunurluu

    salanabilir hem de daha sonra hangi yntemin kullanlacana kolaylkla

    karar verilebilir. rnein karekk bulan yntem iin karekokBul ad

    kullanlabilir.

    parametreListesi: Bir yntem, kendisine verilen deerler zerinde

    alabilir. Karekk bulan yntemin karekkn bulaca deer o yntemin

    parametresidir. Parametre listesi, sfr ya da daha ok parametreden oluur.

    Her parametrenin nce tr sonra ad yazlr ve parametrelerin arasna ,

    (virgl) koyulur.

    Bu bilgiler nda, verilen iki tamsaynn ortak blenlerinin en byn

    bulan ilevi u ekilde tanmlayabiliriz:

    int obeb(int sayi1, int sayi1) {

    // buraya obeb bulma algoritmas kodlanacak

    }

    Benzer ekilde, nesnenin durumunu ekrana yazdran, geriye herhangi bir

    deer dndrmeyen yntemi de u ekilde tanmlayabiliriz:

    void yaz() {

  • // buraya nesnenin durumunu ekrana yazan kodlar yazlacak

    }

    Aada Zaman snfna ait Java kodu grlmektedir:

    class Zaman {

    int saat;

    int dakika;

    int saniye;

    /**

    * Her arldnda nesneyi bir saniye sonrasna gtren yntem.

    * saniye 59, dakika 59, saat ise 23'ten byk olamaz.

    */

    void ilerle() {

    saniye++;

    if (saniye == 60) {

    saniye = 0;

    dakika++;

    if (dakika == 60) {

    dakika = 0;

    saat++;

    if (saat == 24) {

    saat = 0;

    }

    }

    }

    }

    }

    Kod 5-1. Zaman snf

    Grld gibi zellikleri snfn iinde birer deiken olarak, davran ise

    yine snfn iinde bir ilev olarak kodladk. Zaman snfnn bir snf

    olduunu belirten anahtar szck ise class szc. Bu kodu Zaman.java

    adl bir dosyaya kaydettikten sonra derleyebiliriz.

  • u anda szdizim kurallar asndan doru ve geerli bir snf yazm

    durumdayz ancak henz bu snf mantksal adan kullanlabilir deil.

    nk bu snfa ait bir nesne oluturduumuzda nesnemizin durumunu

    birer saniye ilerleterek deitirebileceiz fakat herhangi bir anda nesnenin

    durumunu renebileceimiz bir davran tanmlam deiliz. Baka bir

    deyile zaman ilerletebilir ama deerini renemeyiz; saat ka? diye

    soramayz. Zaman snfndan bir nesneye bunu sorabilmemiz iin, nce

    snfn iine bu soruyu yantlayabilecek davran tanmlamamz gerekiyor:

    /**

    * arld zaman nesnenin o anki durumunu ekrana yazar.

    */

    void zamaniYaz() {

    System.out.println("Zaman: " + saat + ":" + dakika + ":" + saniye);

    }

    Kod 5-2. Zaman nesnesinin durumunu soran yntem

    zamaniYaz() yntemini, Zaman snfna ait herhangi bir nesnenin

    durumunu ekrana yazdran bir yntem olarak kodladk. imdi Zaman

    snfna ait bir nesne oluturup bu nesneyi kullanan alabilir bir program

    elde edebilmek iin main yntemini yazalm.

    main yntemini Zaman snfnn iine yazabiliriz. Ancak Zaman snf kendi

    bana dnldnde, altrlabilir bir snf olmak zorunda deildir. Bu

    snf, yalnzca zaman bilgisini ifade edebilen nesneler oluturulabilmesi iin

    yazlm bir tanmdr. Baka bir deyile, Zaman snfna ait kodlarn iinde

    bulmay beklediimiz yntemler yalnzca bu snfa ait davranlar olmaldr.

    yleyse srf rneimizi altrabilmek iin Zaman snfnn iine, aslnda

    kendi davranlar ile ilgisi olmayan main yntemini yazmak gzel bir

    yaklam olmayacaktr. main yntemi altrlabilir bir program elde etmek

    zere yazlan bir yntem olduundan ve Javada btn kodlarn mutlaka

    bir snfn iine yazlmas zorunlu olduundan, bu yntemi Program adl bir

    snfn iine yazmak daha iyidir.

  • rneklerde main yntemini her zaman Program adl bir snfn iine, dier

    btn snflar ise btnlklerini koruyacak, yalnzca kendi zellik ve

    davranlarn ierecek ekilde kodlayacam.

    Aada Program snfnn kodu grnyor:

    class Program {

    public static void main(String[] args) {

    Zaman zamanNesnesi = new Zaman();

    zamanNesnesi.ilerle();

    zamanNesnesi.zamaniYaz();

    }

    }

    Kod 5-3. Zaman snfn kullanan Program snf

    Program adl snf altrdmzda ekranda aadaki kt oluacaktr:

    u anki zaman: 0:0:1

    imdi bu ktnn nasl olutuuna bakalm:

    Daha nce de belirttiimiz gibi main yntemi programn balang

    noktasdr. JVM, adn verdiimiz snfn iinde main yntemini bulur ve

    main ynteminin ilk satrndan balayarak program iletir. main

    ynteminin ilk satrnda, zamanNesnesi ad ile Zaman snfndan bir nesne

    oluturulmaktadr (nesne oluturma ile ilgili ayrntl bilgi daha sonra

    verilecektir). Daha sonra bu nesneye ilerle() iletisi gnderilerek Zaman

    snfna tanmlanm olan ilerle() davrannn gerekletirilmesi

    istenmektedir. ilerle() davrannn gerekletirilmesi ilerle()

    ynteminin iletilmesiyle olur ve bu yntem nesnenin saniye niteliinin

    deerini 1 arttrmaktadr. Nesne ilk oluturulduunda, niteliklerinin

    deerlerinin herbirinin deeri 0 (sfr)dr (Zaman snfnn btn nitelikleri

    int temel trndedir ve int temel trnn varsaylan deeri 0 (sfr)dr).

    ilerle() yntemi bir kez altnda, saniye niteliinin deeri 1 olur.

    main ynteminin bir sonraki satrnda ise zamanNesnesinin zamaniYaz()

    yntemi arlmaktadr ve bu yntem, niteliklerin o anki deerlerinden

    oluturduu dizgiyi ekrana yazmaktadr.

  • 5.2 Nesne Oluturma

    Snfn bir tanm, nesnenin ise o tanma gre oluturulmu fiziksel bir

    varlk olduunu tekrar hatrlayalm. Bu ifade zerinde biraz durursak u

    sonuca varabiliriz: Nesne oluturulmad srece bellekte fiziksel olarak

    oluturulmu bir varlk yoktur; snfn nitelikleri iin bellekten yer

    ayrlmamtr. rnein, Zaman snfna ait bir nesne oluturulmad srece

    saat, dakika ve saniye nitelikleri yalnzca kat zerinde birer tanmdr.

    Nesne oluturulduu andan itibaren ise bu niteliklerin her birisi iin

    bellekten 32er ikil uzunluunda (int tr 32 ikil uzunlukta), toplam 32 x

    3 = 96 ikil uzunlukta yer ayrlacaktr.

    5.2.1 new ileci

    Herhangi bir snfa ait bir nesne oluturulabilmesi iin new ileci kullanlr.

    new, belirtilen snfa ait bir nesne oluturup bu nesnenin bellekteki adresini

    (referansn) dndrr.

    Kod 5-3e tekrar bakarsak, main ynteminin ilk satrnda

    Zaman zamanNesnesi = new Zaman();

    Kod 5-4. Zaman snfna ait zamanNesnesi adl nesnenin oluturulmas - 1

    yazmaktadr. Bu satr iki farkl satr halinde tekrar yazalm:

    Zaman zamanNesnesi;

    zamanNesnesi = new Zaman();

    Kod 5-5. Zaman snfna ait zamanNesnesi adl nesnenin oluturulmas - 2

    imdi de Javada deiken tanmlama ve ilk deer atama ilemlerinin nasl

    yapldn hatrlayalm. rnein bir tamsay deiken tanmlamak ve o

    deikene 5 deerini atamak iin;

    int sayi;

    sayi = 5;

    yazabileceimiz gibi, tanm yaptmz satrda atama ilemini yaparak

    ksaca

    int sayi = 5;

  • de yazabiliriz.

    Bu bilgiyi hatrladktan sonra Kod 5-5e geri dnelim:

    lk satrda, Zaman snfna ait bir deiken tanm yaplyor; deikenin tr

    Zaman, ad ise zamanNesnesi olarak seilmi. kinci satrda ise

    zamanNesnesi adl deikene bir deer atanyor. Atanan deer, new

    Zaman() deyiminden dnen deer (zamanNesnesi = new Zaman()). Bu

    sonu ise Zaman snfna ait, new ileci ile bellekte oluturulan nesnenin

    adresi. Yani bu satr iletildikten sonra zamanNesnesi adl deikenin

    iinde, bellekteki bir nesnenin (bu nesne Zaman snfna ait) adresi

    bulunuyor.

    Kod 5-4te ise, ayn ilem tek satrda yazlm. Ayn satrda hem Zaman

    snfna ait nesnenin adresini tutabilecek bir deiken tanm yaplm, hem

    de Zaman snfndan bir nesne oluturulup, nesnenin adresi tanmlanan bu

    deikenin iine atanm.

    5.2.2 Referans Tr

    new ileci ile bir nesne oluturulduunu ve bu nesnenin bellekteki adresinin

    dndrldn syledik. Dndrlen adres, oluturulan nesneye daha

    sonra erimek amacyla referans olarak kullanlacaktr. Bu referans

    saklayabilmek iin de bir deikene gereksinim vardr. erisinde referans

    (nesne adresi) saklayabilen trden deikenlere referans trden deiken

    ya da Nesne Tutama (Object Handle) ad verilir ve varsaylan deer

    olarak null deerini alrlar. null, bir nesne tutamann iinde o anda

    herhangi bir nesnenin adresi olmadn belirten deerdir.

    5.2.3 Yn (Heap), Yt (Stack) ve p Toplayc (Garbage

    Collector)

    JVMden bahsederken sanal donanmn 4 kesimden olutuunu ve bu

    kesimlerden birinin yn (heap), birinin de yt (stack) olduunu

    sylemitik. imdi yn ve ytn ne olduunu biraz daha aalm:

  • JVM, oluturulan deiken ve nesneleri ynetmek zere bilgisayarn

    belleini kullanr (32-ikillik JVMnin en fazla 4GB bellek kullanabileceini

    belirtmitik). Ancak deikenleri ve nesneleri ynetirken farkl bellek

    alanlar ve algoritmalardan faydalanr.

    Bir yntem arld zaman, o ynteme ait yerel deikenler ile yntemin

    parametreleri, yntemin dn adresi ve dn deeri ile birlikte yt ad

    verilen bellek alannda oluturulur. Yntemin almas sona erdii zaman

    bu bilgiler yttan atlr (bu bilgilere tekrar eriile