Root > Documents > Web Güvenlik Açıkları > What is Java ?
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > What is Java ?
Madde
  Yazar : Segate
  Date : 23.11.2004 16:16:30
 
# What is Java ?
 

Java ™ platformu , bilgisayar aginin (network) önemi hesaba katilarakve ayni yazilimin birçok degisik bilgisayar ortaminda veya degisik türmakinalarda çalismasi fikri ile gelistirilmis yeni bir teknolojidir.

Java teknolojisi kullanilarak ayni uygulamayi degisik ortamlardaçalistirabiliriz.Örnegin kisisel bilgisayarlarda , Macintosh bilgisayarlarda , hatta ceptelefonlarinda .Java ™ platformu hem programlama dili, hemde bir ortam olarak düsenebiliriz.

Programlama dili olarak, açik , nesneye yönelik (object-oriented), güvenli,saglam, internet için elverisli bir teknoloji diyebiliriz. Ortam olarakda isletim sistemi, veri tabani (database), ve orta katman (middleware) teknolojileri bulmak mümkündür.Gerek Java programlama dili, gerekse bu dile bagli alt teknolojiler , VB™veya Borland Delphi™ gibi sadece belli bir firma tarafindan gelistirilmisolan basli basina ürünler degillerdir.
Java ve bu dile bagli altteknolojiler, Sun MicroSystems tarafindan verilmis açiklamalardan(specifications)olusmaktadir . Bu açiklamalara (specifications) sadik kalan her yazilimfirmasi JVM (Java Virtual Machine - Java Sanal Makinasi) veya Javaprogramala diline bagli alt teknolojiler yazabilir (ör: ApplicationServer - Uygulama sunucusu ).
Eger bu açiklamalara (specifications) sadikkalmayip , standart disi bir JVM veya Java programlama diline bagli altteknolojiler yazilmaya kalkilirsa hukuki bir suç islemis olur (Microsoftfirmasinin yaptigi gibi). Su anda en yaygin kullanilan JVM ler , IBM’inve Sun Microsystems in üretmis olduklaridir, ayrica HP, Apple ve dahabir çok firmanin üretmis olduklari JVM ler bulunmaktadir .2. Java ile Ne Yapilabilir ?Java Programlama dili ile projelerimizi diger programlama dillerine göredaha kolay ve saglikli bir sekilde yapmaniz mümkündür. Kisaca gözatacak olursak, Java programlama dili ile ;· GUI (graphical user interface , grafiksel kullanici ara yüzü)uygulamalari , appletler.· Distributed components (Daginik bilesenler) (ör . EJB, RMI, CORBA).· Servlet , Jsp (web tabanli uygulamalar).·
Veri tabanlarina erisim ile alakali uygulamalar.· Cep telefonlari , Smart kart lar için uygulamalar .· Ve daha niceleri …. için uygulamalar yazmamiz mümkünkür.3. Java Nasil Çalisir ?Java uygulamalari JVM (Java Virtual Machine) tarafindan yorumlanir(interpreted ). JVM, isletim sisteminin en tepesinde bulunur. Bu sayadeyazimis olan Java uygulamalari degisik isletim sistemlerinde, herhangibir degisiklik yapilmadan çalisabilir. Böylece Java programlama dilininfelsefesi olan “Bir kere yaz her yerde çalistir” sözü gerçeklestirilmistir.Sekil-1Asagidaki sekillerde , Javanin kaynak kodundan, çalismasina kadar olanevreleri gösterilmektedir.Derleme ani (Compile Time)Çalisma ani ( Run-time)Sekil-2Byte koduna çevrilen kaynak kod , JVM tarafindan yorumlanir ve uygulamaçalistirilmis olur.

Ufak bir Java uygulamasi üzerinde olaylari dahadetayli bir sekilde inceliyelim. Fakat hemen belirtelim bu uygulamamizindetayli anlatimini birazdan yapacagiz.ör-Selam.javapublic class Selam { public static void main(String args[]) { System.out.println("Selamlar !"); }}Yukarida yazilan uygulamamizin hangi asamalardan geçtigi sekil üzerindegösterirsek ;Sekil-3Yazilan java kaynak kodlarimiz ilk önce derlenir (compile) daha sonraise çalistirilir.
Java kaynak kodu içerisinde belirttigimiz her sinif (class)için fiziksel olarak bir .class dosyasi olusturulur.4. KategorilerJava platformu üç ana gruba ayrilir.Standart JavaEnterprise JavaTüketici için ve gömülü cihazlar için Java (embedded devices)Yukaridaki kategorileri açacak olursak ; 4.1 Standart Java :Java 2 SDK (J2SE)Java 2 Runtime EnvironmentJava Plug-inJava Web StartJava HotSpot Server Virtual MachineCollections FrameworkJava Foundation Classes (JFC)Swing ComponentsPluggable Look & FeelAccessibilityDrag and DropSecurityJava IDLJDBCJavaBeansRemote Method Invocation (RMI)Java 2D 4.2 Enterprise Java :Enterprise JavaBeans (EJB) ArchitectureJavaServer Pages (JSP)Java ServletJava Naming and Directory Interface (JNDI)Java IDLJDBCJava Message Service (JMS)Java Transaction (JTA)Java Transaction Service (JTS)JavaMailRMI-IIOPSoftware Development Kit & Application ModelJava 2 SDK,

Enterprise Edition (J2EE)Sun BluePrints Design Guidelines for J2EE 4.3 Tüketici için ve gömülü cihazlar için Java (embedded devices) :Java 2 Platform, Micro Edition (J2ME technology)Connected Device Configuration (CDC)Connected Limited Device Configuration (CLDC)C Virtual Machine (CVM)K Virtual Machine (KVM)PersonalJavaJava CardJavaPhone APIJava TV APIJini Network TechnologyMobile Information Device Profile (MIDP)5. Gelisim Evreleri1995 Java teknolojisinin ilk çikis yili ; ilk olarak appletteknolojisinin dikkat çektigi seneler.

1996 Java Development Kit (JDK) v1.0 çikartildi. Temel seviyeli islevleriiçeren bir versiyon (ör. soket programlama, dosya I/O, GUI)1997 JDK 1.1 çikartildi. Bu sürümde Java GUI , veritabani erisimi içinJDBC , daginik nesneler için RMI ve daha birçok yeni gelismelereklendi .1998 JDK 1.2 çikartildi .JFC/Swing yayinlandi- ayni sene içersinde 500,000+ download gerçeklestirildi.1999 Java teknolojisi J2SE, J2EE ve J2ME olarak 3’e bölündü .Java HotSpot (performans arttirici) yayinlandi .JavaServer Pages (JSP) teknolojisi yayinlandi.J2EE platform’u yayinlandi .Linux üzerinde J2SE platformu yayinlandi .2000 JDK v1.3 çikartildi .Java APIs for XML teknolojisi yayinlandi .

2002 JDK v1.4 versiyonu çikarildi ( Merlin projesi).Java API for XML binding yayinlandi.Tablo-16. Javanin Basarili Olmasindaki Sebebler 1. Nitelikli bir programlama dili olmasia. C/C++ da oldugu gibi hafiza problemlerinin olmamasi .b. Nesneye yönelik (Object - Oriented) olmasi .c. C/C++/VB dillerinin aksine dinamik olmasi .d. Güvenli olmasi .e. Internet uygulamari için elverisli olmasi. (Applet, JSP,Servlet, EJB, Corba, RMI) 2. Platform bagimsiz olmasi : Bir kere yaz her yerde çalistir7. Çöp Toplayici (Garbage Collector )Çöp toplayici devamli olarak takip halindedir. Çalisma esnasinda ortayaçikan ve sonradan kullanilmayan (gereksiz ) nesneleri bulur ve onlariyok eder (destroy). Böylece bellek yönetiminin (memory management) yükükodu yazan kisiden JVMe geçmis olur. Diger dillerde, örnegin C++programlama dilinde , olusturulan nesnelerin yok edilme sorumlulugukodu yazan kisiye aittir.Çöp toplayicinin ne zaman ortaya çikip temizleme yapacagi belli olmaz. Egerbellekte JVM için ayrilan kisim dolmaya baslamis ise çöp toplayicisidevreye girerek kullanilmayan nesneleri bellekten siler.

Çöp toplayicisi(garbage collector) JVM in yazilisina (implementation) göre degiskenliklergösterebilir. Bunun sebebi her JVM üreticisinin degisik algoritmalarkullanmasindan ileri gelmektedir.8. Javada Yorum Satiri (Comment Line)Java kaynak kodunun içerisine istediginiz yorumlari yazabilmemiz içinbelirli yol izlememiz gerekmektedir. Sunu hemen belirteyim, uygulamalarimiziçerisinde yorum satirlari sik sik kullanilacaktir. Java programlamadilinde yorum satirlarini belirtmek için iki yöntem kullanilir./* yorum */ : Bölme isareti-yildizdan, diger yildiz-bölme isaretiarasina kadar istedigimiz yorumu yazabiliriz . Uzun yorumlarda bu yöntemikullanabilirsiniz.// yorum ; : Tek satirlik yorum yapmak için idealdir bir yöntemdir.

Kisa yorumlariniz için bu yöntemi kullanabilirsiniz.9. Hersey NesneHer programlama dilinin kendine has veri yönetim sekli bulunur. Javaplatformunda çalisan bir uygulama çalisma esnasina nesneler olusturulur.Burada ki soru bizim nesnelere direk olarak mi ? Yoksa onlara dolaylibir sekilde mi baglanti saglayip kullandigimizdir. Java programlamadilinde herseye nesne olarak davranilinir. Herseyin nesne olmasina karsin,bu nesneleri kullanmak için referanslara ihtiyaç duyariz.Örnegin elimizde bir maket olsun (nesne olarak düsünün) olsun ve bumaket ucagi kontrol etmek amaci ile birde kumanda cihazinin (referans)oldugunu düsünün. Bu maket ucagini havada saga veya sola döndürmek içinelimizdeki kumanda cihazini kullanmak zorundayizdir. Ayni sekild ebumaket ucagini havalandirmak veya yre indirmek içinde elimizde bulunankumanda cihazindan faydalaniriz. Burada dikkat edillmesi gereken hususkumanda cihazindan çikan emirlerin maket ucagani tarafindan yerinegetirilmesidir.

Her durumda elimizde bir kumanda cihazi var diye birde maket ucagimizolmak zorunda degildir. Her durumda bir referansi tek basina datanimlayabiliriz.Iste ispati; gösterim-1String kumanda; // kumanda referansi su an için bir String nesnesine baglidegil.Sekil-4Burada yapilan olay sadece referans olusturmaktir . Eger bu referansamesajlar göndermeye kalkisirsak ne olur ? Söyle düsünelim; elimizdefazla para olmadigi için önce kumanda cihazini aldik ve eve getirdik amadikkat edin henüz ortalikta maket ucagimiz filan yok ! Simdi bu kumandacihazini kullanarak komutlar göndersek ne olur ? Hiçbirsey.
Çünkü bukumandanin bagli oldugu bir maket uçak ortaliklarda yoktur. Javaprogramlama dilinde de olaylar böyle isler. Tek basina bir referans tanimlandimi bu bir ise yeramaz. Ise yaramasi için bu referansin ilgili nesneyebagli olmasi gerekir, aksi takdirde hata ile karsilasiriz. Peki simdigelin bu referansimizi ilgili nesneye bagliyalim;Sekil-5gösterim-2String kumanda= new String("maket ucak") ; gösterim-3String kumanda="maket ucak" ;Yukaridaki gösterimlerde, String tipindeki referanslara, Stringtipindeki nesneler baglanmistir. Gösterim-2 ile gösterim-3 arasindaherhangi bir fark yoktur. Java programlama dilinde String nesnesinin özelbir yeri vardir. String nesneleri çokca kullanildiklari için gösterim-2deki ifadeyi bir nevi kisaltma gibi düsünebiliriz10. Sinif (Class) Nedir ? Nesne Nedir ?Sinif ve nesne kavramini bir benzetme ile açiklamak en kolayi herhalde..Sabun fabrikasinda yeni bir sabun tasarimi üzerinde çalistiniz ve ortayabir kalip çikartdiniz ve artik üretim asamasina geçmek istiyorsunuz. Bukalip içerisinde sabun nesnelerinin hangi boyutlarda olacagi, hangirenkde olacagi , nasil kokacagi vb.. gibi bilgilerin hepsi sizin tarafinizdantespit edilmisdir. Üretim asamasina geçildiginde hep ayni sabun kalibinikullanarak yeni sabun nesneleri üretmeniz mümkün olacaktir. Burada ki önemlinokta sabun kalibinin tasarimi bir kere yapilmistir ama bu kalipkullanilarak n tane sabun nesnesi üretilmektedir. Bu örnekden yola çikarak,kalibi sinifa , sabunlari ise nesnelere benzetebiliriz.Sekil-611. Depolanan (Storage) Veriler Nerede DurmaktadirDepo, toplam 4 alandan olusur, bu 4 alani açiklarsak : 11.1 Stack : Bulundugu nokta bellek içerisindedir yani RAM(random-accessmemory). Bu alanda bulunan yigin isaretcisine (stack pointer) direkolarak Cpu dan destek vardir. Yigin isaretcisi (stack pointer) asagiyainince yeni bir hafiza alani olusturur , yukari kalkinca ise bellekalanini birakir (release) . Java derleyicisi programi olusturmadan evvel,stack üzerinde olusturulacak olan verilerin boyutlarini ve ömürlerini (lifetime) bilmek zorundadir çünkü yigin isaretcisini (stack pointer) asagi veyukari hareket ettirecek olan kodu olusturmasi gerekmektedir. Stack üzerindereferanslarin kendileri bulunur. Maket ucagi örnegini hatirlarsak, bualanda sadece kumanda cihazlari durabilir. 11.2 Heap : Burasi genel amaçli bir bellek havuzudur . Stackalaninin tersine , derleyici burada ne kadarlik bir bellegin payedilecegini bilmek zorunda degildir. Bu büyük bir rahatlik getirmektedirçünkü ne zaman bir nesne olusturmak istersek sadece new anahtarkelimesini kullanarak bu alanda bir yer kendimize tahsis etmis oluruz.Bu kadar rahatligin karsiliginda ise ödenmesi gereken fatura hizdir.Heap alaninda yer ayirmak için harcanan zaman , stack alaninda yer ayirmaktandaha fazladir. Heap alaninda nesnelerin kendisi durur. Maket ucagi örneginihatirlarsak, bu alanda sadece maket uçaklarinin kendisi bulunur yani bualani gökyüzü gibi düsünebiliriz. 11.3 Statik Alan : Bu alanda RAM üzerinde bulunur. Statikalanda yer alan veriler, programin çalismasi süresince orada yasarlar.Tüm nesneler bu statik verileri görebilirler , ortak bir alan gibidüsünebiliriz . Veriyi statik yapmak icin static kelimesini degiskenin önünegetirmemiz yeterli olur . Objelerin kendileri bu alanda yer almazlar. 11.4 Sabit Disk : Bazi durumlarda uygulamalarin içerisindeolusturdugumuznesnelerin ,uygulama sonlandiktan sonra bile varliklarini sürdürmeleriniisteriz.1 ) Akiskan Objeler (streamed objects) : Bu nesneler, genellikle ag(network)üzerindeki baska bir makinaya gönderilmek üzere byte irmaklarinadönüstürülürler.2 ) Kalici Objeler ( persistent objects) : Bu nesneler kendi durumlarini(state) saklarlar. Kendi durumlarini saklamaktan kasit edilen iseözelliklerinin(attribute) degerlerinin korunmasidir.12. Ilkel TiplerJava programlama dilinde bulunan özel bir grup daha vardir. Bu grubailkel (primitive) tipler denir. Bu tipleri uygulama yazarken çogu yerdeihtiyaç duyariz. Bu sebepten bu ilkel tipleri heap alaninda newanahtar kelimesi ile olusturmak pek de avantajli olmamaktadir. Bununyerine bu ilkel tiplerin stack alaninda saklanmasi çok iyi performansvermektedir.

Yanliz buradaki espiri, her ilkel degiskenin bir referansolmamasidir, yani bu ilkel tipler degerlerini kendi üzerlerinde tasirlar.
Ilkel tipBoyutMinimumMaximumSarmaliyici tipboolean———Booleanchar16- bitUnicode 0Unicode 216- 1Characterbyte 8- bit-128+127Byteshort16- bit-2 15+2 15—1Shortint32- bit-2 31+2 31—1Integerlong64- bit-2 63+2 63—1Longfloat32- bitIEEE754IEEE754 Floatdouble64- bitIEEE754IEEE754Doublevoid———VoidTablo-2Bu ilkel tiplerin birer adet sarmaliyici(wrapper) sinifi bulunur. Örneginilkel int tipinin sarmaliyicisi Integer sinifidir. Ayni sekilde ilkeldouble tipinin sarmaliyicisi Double sinifidir. Ilkel tipler ile bunlarinsarmalayicilari siniflari arasindaki farklari ilerleyen bölümlerdeinceliyecegiz. gösterim-4int i = 5 ; // ilkel tip gösterim-5Integer in = new Integer(5); // sarmaliyici class13. Geçerlilik Alani (Scope)Her programlama dilinde degiskenlerin geçerlilik alani kavrami bulunur.Java ile C ve C++ dillerindeki degiskenlerin geçerlilik alanlarinin nasiloldugu görüp bir karsilastirma yapalim.gösterim-6{ int a = 12; /* sadece a mevcut*/{ int b = 96; /* a ve b mevcut */}/* sadece a mevcut *//* b geçerlilik alaninin disina çikti */}Önce Java programlama dili içerisindeki geçerlilik kavraminin nasil oldugunuinceliyelim. Yukaridaki gösterimimizde 2 degiskeninin geçerlilikalanlar incelenmektedir. ilkel int tipinde olan a degiskeninin geçelilikalani kendisinden daha iç tarafda olan alanlarda bile geçerlidir. Amailkel int tipindeki b degiskenini incelersek, bu degiskenin kendisindendaha dis tarafda olan aanda gerçerli olmadigini görüyoruz. Simdi asagidakigösterimizi inceliyelim, bu ifade C ve C++ için dogru ama Javaprogramlama dili için yanlistir.gösterim-7{ // dis alan int a = 12; { // iç alan int a = 96; /* java için yanlis ama C ve C++ dogru*/ } // iç alanin sonu} //dis alanin sonuÖrnegimizde görüldügü üzere dis alan iç alani kapsamaktadir. Javaprogramlama dilinde, dis alanda tanimlanan bir degisken iç alanlarda dagerçerliligini sürdürür.14. Nesnelerin Geçerlilik AlanlariJava programlama dilinde nesnelerin ömürleri, ilkel tiplere göre dahadegisiktir.gösterim-8if (true){ String s = new String("Selamlar");} /* geçerlilik alaninin sonu*/Yukaridaki gösterimde if kosuluna kesinlikle girilecektir, if kosulunagirdigi anda String nesnesi heap alaninda olusturulacaktir. Bu yeni olusturulanString nesnemizi, String tipindeki s referansi (degisken) ile kontroletmekteyiz. Peki if kosulundan çikiltiginda neler olucaktir ? Geçerlilikalanini sona erdiginden s referansimiz artik kullanilamiyacak halegelecektir ama ya heap deki String nesnemize neler olacaktir ? Buradakicevap basittir , Çöp toplayici(Garbage Collector) devreye girdigi anheap alanindaki bu erisilemez ve çöp haline gelmis olan String nesnesinihafizadan silecektir. Yukarida bahsettigimiz hikaye C++ dilinde büyükbir sorundur çünkü C++ dilinde olusturulan her nesneyi yok etmesorumlulugu yine kodu yazan kisiye aittir. Eger kodu yazan kisi olusturmusoldugu herhangi bir nesneyi daha sonradan yok etmeyi unutursa hafiza kaçaklaribaslayacaktir.15. Yeni Sinif OlusturmaJava programlama dilinde kendimize özgü bir sinif nasil olusturabilirizsorusuna yanit olarak asagidaki gösterimi örnek verebiliriz. Asagida olusturulansinifin hiç bir fonksiyonelitesi yoktur ama ilerleyen safhalarda bu sinifimizigelistirecegim .gösterim-10public class YeniBirSinif { // gerekli tanimlar ..}16. Alanlar ve MetodlarBir sinif(class) tanimladigimiz zaman, bu sinifimizin üzerinde iki seyyapabiliriz. 16.1 ) Alanlar yani global degiskenler, ilkel (primitive) bir tipveya bir baska sinif tipinde olabilirler.gösterim-11public class YeniBirSinif { public int i; public float f; public boolean b;}Eger bu global degiskenlere, olusturulduklari anda ilk degerlerinivermek istiyorsak;gösterim-12public class YeniBirSinif { public int i = 5 ; public float f = 3.23; public boolean b = true ;}Bu alanlari(field) kullanmadan evvel onlarin ilk degerlerini almis (initialize)olmalari gerekmektedir. Peki gösterim-11de biz herhangi bir ilk degerverme islemi yapmadik ve Java bu konuda bize kizmadi, neden ?Ilkel TipVarsayilan deger (Default value)booleanfalsechar ‘u0000’ (null)byte(byte)0short (short)0int0long0Ldouble 0.0dfloat0.0f(Not: Sinif tipindeki referanslara o tipdeki nesne baglanmamis ise degerinulldir )Tablo-3Bu sorunun cevabi yukaridaki tabloda yatiyor. Eger bir global degiskeneilk degerlerini vermez isek -ki gösterim-11 de yaptigimiz tamamen böylebir harekettir- o zaman Java bu global degiskenlere kendi mevcut-varsayilan(default) ilk degerlerini verir, bu mevcut degerleri yukaridakitablodan inceliyebilirsiniz .Tekrardan YeniBirSinif sinifimiza geri dönelim, bu sinif içerisindehala ise yarar birseyler yok gibi sadece 3 adet global degisken tanimladik.Simdi bu YeniBirSinif sinifina ait bir nesne olusturalim.gösterim-13YeniBirSinif ybs = new YeniBirSinif();ybs isimini verdigimiz referansimiz heap alanindaki YeniBirSinifnesnesini göstermektedir. Eger biz heap alanindaki bu YeniBirSinifnesnesi ile temas kurmak istersek ybs referansini rahatliklakullanabiliriz .Nesnenin alanlarina ulasmak için “.” (nokta kullaniriz) (Not : Ulasmakistegimiz alan private ise o zaman o alana disaridan ulasmanin hiçbiryolu yoktur , public , friendly , protected , private ileridekikonularda detayli bir sekilde anlatilmaktadir , panik yok gösterim-14ybs.i ;ybs.f ;ybs.b ;Eger nesnemizin alanlarina ilk degerlerinden farkli degerler atamakistiyorsak ;gösterim-15ybs.i = 5;ybs.f = 5.3f;ybs.b = false;Siniflarimiza ait global degiskenlerin tipi ilkel bir tip ise (ör: int,double, float ...gibi gibi), bu degiskenlere nasil deger atanacagini venasil degerlerinin alinacagini az çok gördük. Peki siniflarmiza aitglobal degiskenlerin tipleri baska bir sinif tipinde ise olaylarin akisinasil olacaktir ?ör-YeniBirSinif.javaclass YeniBirSinif { public int i; public float f; public boolean b; public String aciklama = new String("nesnemizin aciklamasi");}Yukaridaki örnegimizde YeniBirSinif sinifimizin içerisinde ilkel tipdekiglobal degiskenlerin disinda, baska bir sinif tipinde olan aciklama degiskeniyer almaktadir. Ilkel tipler ile sinif tipindeki degiskenlerin arasindakifarkli asagidaki sekil üzerinde inceliyelim.Sekil-7Sekildeki main() metodu java uygulamalari için baslama bölgesidir, ilkörnegimiziyaparken daha iyi anlayacagiz . YeniBirSinif sinifina ait bir nesneolustururken görüyoruz ki aciklama global degiskenine bagli olan Stringnesneside heap bölgesinde yerini aliyor, yani heap bölgesinde 2 adetnesne olusmus oluyor, biri YeniBirSinif sinifina ait nesne, digeri iseString sinifina ait nesne. 16.2 ) Metodlar nesnelerin ise yarar hareketler yapmasina olanak verenkisimlar diye bir giris yapsam sanirim yanlis olmaz. Asagidaki gösterimimizde,bir metodun iskeletini incelemekteyiz. gösterim-16dönüsTipi metodunIsmi( /* argüman listesi */ ) { /* Metod gövdesi */}Simdi yukaridaki metod iskeletinde tanimlanmis olan kisimlari tekerteker açikliyalim.dönüsTipi = Bir metod ya deger döndürür veya döndürmez.
Bu deger birilkel tip olabilir veya bir nesneye baglanmis referans olabilir. Hatirlarsaniznesneler heap alaninda sabitlerdi, bu yüzden metod içerisinden döndürülendeger nesnenin kendisi degil, bu nesneye bagli referansdir (degiskendir).Eger bir metod hiçbirsey döndürmüyorsa void ekini metodun basina yerlestirmemizgereklidir.metodunIsmi = Javanin kendisine ait olan kelimeler (if , else , import ,class , return..vb) ve Türkçe krakterler hariçinde istediginiz ismikullanabilirsiniz ama metodlar bir eylem içerdikleri için , metodisimlerininde bir eylemi belirtmesi tercih edilir örnegin : sayiSirala(), enBuyukSayiBul(), sqlCalistir() gibi . Burada dikkat edecek olursaniz,metod isimlerinin ilk harfleri küçük sonra gelen ek kelime ise büyüktür.arguman listesi= Metod içerisinde islemler yapabilmek için gerekli olanparametreler. Bu parametreler ilkel tipte veya sinif tipindeolabilirler.metod gövdesi = Bu kisim kodu yazan kisinin hayal gücüne bagli olarakdegismektedir.

Bu kadar açiklamadan sonra gerçek bir metod örnegi verebiliriz .gösterim-17 int boyutDondur(String kelime) { return kelime.length() ; } // metodun sonuboyutDondur() metodu String tipinde parametre aliyor ve bu Stringtipindeki degiskenin bagli oldugu String nesnesinin boyutunu geri döndürüyor.Metodumuzun geri döndürdügü deger ilkel int tipindedir. Herhangi bir degergeri döndürebilmek için return anahtar kelimesini kullanmamizgereklidir.gösterim-18String elmaHesapla( int elmasayisi) { return new String(" toplam elma sayisi = " + elmasayisi*18);}Gösterim-18de verilen elmaHesapla() metodu int tipinde parametre aliyor,sonra yeni bir String nesnesi olusturup bunu geri döndürüyor.

Buradakiilginç olabilecek olan husus , int olan bir degiskeni onsekiz ile çarpip sonradan + operatörü ile String bir ifadenin sonuna eklenmis olmasidir. Diger dillerde bu islem için çevirici bir fonksiyona ihtiyacduyardik, örnegin Delphi programlama dilindeki intToStr() fonksiyonunu çokkere kullandigimi hatirlarim, ama Java programlama dilinde String birifadeden sonra gelen herhangi bir tipdeki degisken otomatik olarakString nesnesine çevrilir ." toplam elma sayisi = " String bir ifadedir ve bu ifadeden sonragelecek olan her türlü tip (ilkel veya nesne) , otomatik olarak Stringtipine dönüstürülürler. Eger Javanin yardim dokumanlarindan, Objecttipine ait bilgilere bakarsaniz , her nesnenin hali hazirda bir toString()metodunun oldugunu görürsünüz . Eger bir nesne otomatik veya degilString nesnesine dönüstürülmek istenirse bu nesnenin toString() metodu çagrilir.Bu konuya ilerleyen konularda daha detayli bir sekilde görecegiz.gösterim-19void hesapla(String kelime , int kdv ) { int sondeger = 0; int kelimeboyut = 0 ; int toplamboyut ; // Hatali !!!!! toplamboyut++; sondeger = kelimeboyut + kdv ;}hesapla() metodu iki adet parametre almaktadir ve geriye hiçbirseydöndürmüyeceginibize açik açik void anahtar kelimesi ise söylemektedir. Bu örnegimizdedikkat etmemiz gereken ikinci nokta ise metodlarin içerisinde tanimladigimizdegiskenlerin (yerel degiskenler) ilk degerlerini kesinlikle amakesinlikle bizim tarafimizdan belirtilmesi gerekmektedir.Siniflara (Class) ait global degiskenlere (veya alanlarda diyebilirizhepsi ayni anlami tasimaktadir) ilk degerlerini vermedigimiz zaman Javabu degiskenlere ilk mevcut - varsayilan degerleri kendi verir (bkz )ama metod içersinde tanimlanan degiskenler için ayni durum söz konusu degil.Bu sebepten dolayi toplamboyut degiskeninin tanimlanma sekli yanlistir.gösterim-20void uniteKontrol(int deger) { if (deger == 1 ) { // eger deger 1e esitse metod u terk et return; }else { // gerekli islemler }}Bu metod örnegimizde ki ana fikri void ile return anahtar kelimelerininayni metod içinde kullanimini göstermektir. if - else kontrolmekanizmalarini henüz görmedik ama bu örnek için kullanilmalarigerekliydi. Buradaki return parametresi metodun acilen terk edilmesigerektigini belirtir.17.

Ilk Java Programimizör-Selam.javapublic class Selam { public static void main(String args[]) { System.out.println("Selamlar !"); }}Ilk örnegimizi adim adim açiklayalim, fakat sunu hemen belirtim , javabüyük ve küçük harfe karsi duyarlidir (case sensitive) . Yani publicyerine PUBLIC yazarsaniz hata ile karsilasirsiniz.public class Selam :Bu kisimda yeni bir sinif olusturuyoruz.public static void main(String args[]) :Javada bir sinifin tek basina çalismasini istiyorsak (standalone) bumetodu yazmak zorundayiz . Bu metodu siniflar için bir baslagiç noktasiolarak var sayabiliriz. Burada iki bilinmedik konuyu ele almakgereklidir. Bunlardan birincisi statik metodlar, ikincisi ise dizilerdir(array).statik metodlar : Statik metodlari , nesneye bagimli olmayan metodlardiye tanimliyabiliriz.Bu metodlarin kullanilmasi için sinifa ait nesnenin olusturulmus olmasigerekmez .ör-TestNormal.javapublic class TestNormal { public void uyariYap() { System.out.println("Dikkat Dikkat"); } public static void main(String args[]) { TestNormal tn = new TestNormal() ; //dikkat tn.uyariYap(); }}TestNormal.java uygulamamizda uyariYap() metodu statik degildir . Bu yüzdenbu metodun çagirilabilmesi için TestNormal sinifina ait bir nesne olusturulmasigerekmektedir.
Simdi diger örnegimize geçelim .ör-TestStatik.javapublic class TestStatik { public static void uyariYap() { System.out.println("Dikkat Dikkat statik metod"); } public static void main(String args[]) { TestStatik.uyariYap(); }}Bu örnegimizde tek fark uyariYap() metodunun statik olarak degistirilmesidegildir. Bu metodun çagrilma seklide degismistir. uyariYap() metoduartik TestStatik nesnesine bagli bir metod degildir , yani uyariYap()metodunu çagirabilmemiz için TestStatiksinifina ait bir nesne olusturmamizgerekmez. main() metodunda da isler aynidir , fakat main() metodununJava içerisinde çok farkli bir yeri vardir. main() metodu Javauygulamalari için bir baslangiç noktasidir.Diziler (Arrays) : main() metodu parametre alarak String tipinde dizialir, bu String dizinin içersinde konsoldan Java uygulamasina gönderilenparametreler bulunur.args[0] : konsoldan girilen 1. parametre degerini tasir ..args[1] : konsoldan girilen 2. parametre degerini tasir ..args[n-1] : konsoldan girilen n. parametre degerini tasir ..Javada diziler sifir dan baslarlar. Dizileri ilerliyen bölümlerde yogunbir sekilde inceliyecegiz.System.out.println("Selamlar !") :Bu komut satiri , bilgileri konsola (ekrana) basmamizi saglar. Javanin dokümanlarina bakarsak (bkz), System sinifinina ait static bir metodolan olan out methodunun var oldugunu görürüz. Bu yüzden System sinifiniolusturmak zorunda degiliz ( new System() gibi ). out methodu bizeprintStream nesnesi olusturur ve printStream nesnesinin println()methodu ile bilgileri konsola (ekrana) bastiririz.18. JAVA Kurulumu , Derleme ve ÇalistirmaJAVA 1.4.1 versiyonunun kurulumunu hem unix hemde windows sistemlerindenasil yapildigina bakalim. JAVA 1.4.1 veya daha gelismis versiyonlarinihttp://java.sun.com adresinden indirebilirsiniz. 18.1 unix/linux kurulumuhttp://java.sun.com adresinden sisteminize uygun olan java versiyonunuseçmeniz gerekmektedir. Solaris ve Linux için degisik java versiyonlaribulunmaktadir. Ama kurulumlari aynidir. Iste yapilmasi gerekenlerIndirmis oldugunuz java kurulum dosyasini , size uygun bir yere açin (örnegin/usr/java ) ,gunzip ve tar komutlarinin örnegi asagidaki gibidir ;Öncelikle sikistirilmis dosyayi açiyoruz ;bash# gunzip j2sdk1.4.1.tar.gzdaha sonra arsivlenmis dosyanin içeligini /usr/java dizinine çikartiyoruz

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©