Türkçe ansiklopedi, sözlük, genel baþvuru ve bilgi sitesi

Java (programlama Dili) hakkýnda bilgi

Java, Sun Microsystems mühendislerinden James Gosling tarafýndan geliþtirilmeye baþlanmýþ açýk kodlu, nesneye yönelik, platformdan baðýmsýz, yüksek performanslý, çok iþlevli, yüksek seviye, adým adým iþletilen (interpreted) bir programlama dilleri|dildir. ...

Java Sun Microsystems mühendislerinden James Gosling tarafýndan geliþtirilmeye baþlanmýþ açýk kodlu, nesneye yönelik, platformdan baðýmsýz, yüksek performanslý, çok iþlevli, yüksek seviye, adým adým iþletilen (interpreted) bir dildir. Java ilk çýktýðýnda daha çok küçük cihazlarda kullanýlmak için tasarlanmýþ ortak bir platform dili olarak düþünülmüþtü. Ancak platform baðýmsýzlýðý özelliði ve standart kütüphane desteði C ve C++'tan çok daha üstün ve güvenli bir yazýlým geliþtirme ve iþletme ortamý sunduðundan, hemen her yerde kullanýlmaya baþlanmýþtýr. Þu anda özellikle kurumsal alanda ve mobil cihazlarda son derece popüler olan Java özellikle J2SE 1.4 ve 5 sürümü ile masaüstü uygulamalarda da yaygýnlaþmaya baþlamýþtýr. Java'nin ilk sürümü olan Java 1.0 (1995) Java Platform 1 olarak adlandýrýldý ve tasarlama amaçýna uygun olarak küçük boyutlu ve kýsýtlý özelliklere sahipti. Daha sonra platformun gücü gözlendi ve tasarýmýnda büyük deðiþiklikler ve eklemeler yapýldý. Bu büyük deðiþikliklerden dolayý geliþtirilen yeni platforma Java Platform 2 adý verildi ama versiyon numarasý 2 yapýlmadý, 1.2 olarak devam etti. 2004 sonbaharýnda çýkan Java 5, geçen 1.2, 1.3 ve 1.4 sürümlerinin ardýndan en çok geliþme ve deðiþikliði barýndýran sürüm oldu. Java SE 7 ise (kod adý: Dolphin) Sun'un üzerinde çalýþtýðý, Java teknolojisinin gelecekteki sürümüdür. 13 Kasým 2006 da Java platformu GPL lisansýyla açýk kodlu hale gelmiþtir. ===Sürüm Tarihçesi=== Java Dili, JDK 1.0 dan bu yana çeþitli deðiþikliklere uðramýþtýr.
  • 1.0 (1996) — Ýlk sürüm.
  • 1.1 (1997) — Önemli eklentiler. Örneðin iç sýnýflar.
  • 1.2 ( 4 Kasým, 1998) — Kod adý:''Playground''. API'de önemli deðiþiklikler, reflection özelliði ve JIT Derleyicisi nin eklenmesi. ancak dilin kendisinde önemli deðiþiklikler olmadý.
  • 1.3 ( 8 Mayýs, 2000) — Kod Adý: ''Kestrel''. HotSpot JVM sunuldu.
  • 1.4 ( 13 Þubat, 2002) — Kod adý: ''Merlin''. assert kelimesinin dile ekleniþi, nio sýnýflarý ve pek çok yeni API deðiþikliði.
  • 5.0 ( 29 Eylül, 2004) — Kod Adý: ''Tiger''. (Önce 1.5 olarak duyruldu) Pek çok yeni dil özelliði eklendi.
  • 6.0 ( 11 Aralýk, 2006) — Kod Adý: ''Mustang''. Grafik alt yapýsýnda ve sanal makine baþarýmýnda geliþmeler oldu.
  • 7.0 ( 2008, ''öngörülen'') — Kod Adý: ''Dolphin''. Muhtemel JVM yapý deðiþikliði. ==Java Nasýl Çalýþýr?== Bir Java yazýlýmý þu þekilde geliþtirilir::
  • Programcý Java kodunu yazar.
  • Bu kod bir Java derleyicisi ile derlenir. Sonuçta bytekod adý verilen bir tür makine kodu ortaya çýkar. Platform baðýmsýzlýðýný saðlayan þey bytecode'dur. Çünkü bir kere bytecode oluþtuktan sonra yazýlým sanal makine içeren tüm iþletim sistemlerinde çalýþabilir.
  • Bu byte kod Java Virtual Machine (Java Sanal Makinesi) tarafýndan adým adým iþletilir. Bu adýmlarý yakýndan inceleyecek olursak: ===Java Kodunun Yazýlmasý=== Java nesneye yönelik bir dil olduðundan tüm yazýlým sýnýflar ve nesneler üzerinden yürütülür. Sýnýflar uygulamadaki nesnelerin tanýmlandýðý kod parçalarýdýr. Java'da her bir sýnýf bir dosya içerisinde yer alýr. Dosyalarýn uzantýlarý .java þeklindedir. Dosya adý ise içinde tanýmlanan sýnýf ile aynýdýr. Örneðin, BenimSinif.java gibi. ===Çalýþtýrma ve Java sanal makinesi=== Sanal makine donanýmdan baðýmsýz yazýlým geliþtirme ihtiyacýna cevap verme amacýyla geliþtirilen bir teknolojdir. Java'nýn temel felsefesi olan "bir kere yaz, her yerde çalýþtýr" sanal makine sayesinde varolmuþtur. Sanal makineyi bir yönden bir tür hayali bir mikroiþlemci gibi düþünebiliriz. Gerçek tüm mikroiþlemciler (Intel Pentium, AMD Athlon, Sun Sparc vs) belirli bir grup komutu iþlemek üzere tasarlanmýþtýr. Bu komutlara iþlemcinin komut kümesi adý verilir. Örneðin x86 komut kümesi gibi. Tüm yazýlýmlar çalýþabilmek için önce bu komut kümesine dönüþtürülür, daha sonra iþlemci bu komutlarý sýra ile gerçek iþlemci komutlarýna dönüþtürüp iþletir. Java Sanal makinesi de Bytekod komut kümesini týpký iþlemci gibi adým adým iþletir. Java'nin interpreted bir dil olarak adlandýrýlmasýnýn nedeni budur. Java'nýn doðrudan bytecode çalýþtýrmasý performansýnýn düþük olabileceði izlenimini verebilir. Gercekten Java'nin ilk yýllarýnda iþletim baþarýmý çoðu uygulama için kabul edilemeyecek kadar kötü idi. Ancak, JVM tasarýmý geçen 10 yýlda çok deðiþmiþ ve geliþtirilmiþtir. Þu anda Java'nýn performansýnýn çoðu alanda C++'ýn performansýna eþ bir seviyede oldugu iddia edilmektedir. Her ne kadar C- C++ dilleri de taþýnabilir bir yapýda olsa da bu özellikleri Java ile kýyaslanamayacak kadar geri bir yapýdadýr. Eðer sözkonusu dil C++ olsaydý üç ayrý kod ya da kodda üç ayrý #ifdef vs tanýmý, üç ayrý obje dosyasý oluþturulmasý gerekirdi ve çoðu uygulamada C++ projesi sadece tek platforma destek verirdi (win32 gibi) ==Java Ýle Ýlgili Bazý Kavramlar== Nesneye yönelik programlama mantýðý: ===JIT=== Java ilk çýktýðýnda bytecode iþletme hýzý çok iyi deðildi. yerine göre sistemin öz yazýlýmlarýndan 5-10 kat yavaþ çalýþýyordu. Bu nedenle bazý yazýlým geliþtirme þirketleri JIT yani "Just-in-time compile", "anýnda derleme" araçlarý üretmeye baþladýlar. Yapýlan þey byte kodu sanal makinenin kurulu olduðu gerçek sistemin diline anýnda derleme yaparak dönüþtürmesiydi. Bu sayede performansta ciddi artýþlar saðlandý. Ama 2000 yýlýndan sonra gelistirilen sanal makinelerde (Hotspot gibi) JIT'in iþlevi VM'içinde yer almaya baþlamýþ, iþlemci hýzý ve bellek miktarýnýn dramatik biçimde artmasý ile dýþ JIT yazýlýmlarý popülerliðini kaybetmiþtir. Bugün halen birkaç ürün (Excelsior JET gibi) pazarda bulunsa da genellikle bu yöndeki ihtiyaç azalmýþtýr. ===Java API=== Java API, Java yazýlýmlarýnda kullanýlan yazýlým kütüphanelerine genel olarak verilen isimdir. Java API ile disk, grafik, að, veri tabaný, güvenlik gibi yüzlerce konuda kullanýcýlara eriþim imkaný sunulur. Java API J2SDK'nýn bir parçasýdýr.

    Çöp toplayýcý (Garbage Collector)

    Çöp toplama teknolojisi Java'dan önce de var olan ama Java ile adýný duyurmuþ ve yaygýn olarak kullanýlmaya baþlanmýþ bir kavramdýr. C++, C gibi dillerin en büyük handikaplarýndan birisi dinamik bellek yönetimidir. Yazýlýmda iþaretçi (pointer) kullanarak dinamik olarak bellek ayýrdýktan sonra o bellek ile iþiniz bittiðinde mutlaka ayrýlan belleði bellek yöneticiye özel metodlar yardýmýyla (delete, free vs.) iade etmeniz gerekir. Yoksa bellek sýzýntýsý (Memory Leak, MLK) oluþur ve bu bir süre sonra yazýlýmýn ve iþletim sisteminin beklenenden farklý davranmasýna yol açabilir. Sýzýntýlarýn tespiti oldukça güçtür ve bulunmasý zor hatalara yol açar. Bu nedenle bugünün tüm büyük C ve C++ yazýlýmlarý az da olsa bellek sýzýntýsý içerir (iþletim sistemleri dahil). Çöp toplayýcý sayesinde Java'da bir nesne oluþturulduktan sonra o nesne ile iþiniz bittiðinde hiçbir þey yapmanýz gerekmez: sanal makine akýllý bir biçimde kullanýlmayan bellek bölümlerini belirli aralýklarla ya da uyarlamalý metodlarla otomatik olarak temizler ve sisteme iade eder. Bu iþleme çöp toplama, ya da "garbage collection" adý verilir. Çöp toplama sistemlerinin yapýsý oldukça karmaþýktýr ve geçen yýllar içinde büyük geliþmeler kaydedilmiþtir. Çöp toplayýcýnýn varlýðý Java'da bellek sýzýntýsý olmayacaðý anlamýna gelmez, ama bellek sýzýntýlarý daha ender olarak ve farklý þekillerde karþýnýza çýkar ve genellikle tedavi edilmesi daha kolaydýr. ===Jar=== Jar (Ýngilizce ''Java Archive'', yani ''Java Arþivi''), aslýnda bir tür sýkýþtýrma formatýdýr. Jar ile derlenen Java kodlarý ile oluþan yazýlýmýn paketlenip taþýnmasý kolay bir hale getirilir. Jar dosyalarý temelde bytekod bloklarý içerir. Jar dosyalarý genellikle kütüphane oluþturmada ya da uygun biçimde hazýrlanýrsa iþletim sisteminden doðrudan çalýþtýrýlabiliecek bir þekilde kullanýlabilir (Executable jar, iþletilebilir jar) jar dosyalarýnýn içeriðini sýkýþýtýrma yazýlýmlarý ya da java yazýlým geliþtirme araçlarý ile inceleyebilirsiniz. Java 1.5 ile yeni bir tür jar oluþturma metodu da kullanýma girdi. Pack200 adý verilen hiper-compression algoritmasý ile jar dosyalarý daha kucuk boyutlara indirilebiliyor. Ancak bu teknoloji daha çok að üzerinden yapýlan transferlerde kullanýlýyor.

    AWT ve Swing=== AWT, ilk java ile birlikte geliþtirilen temel grafik arayuz oluþturma kütüphanesine verilen isimdir. AWT iþletim sisteminin doðal grafik yapýlarýna eriþimi saðlar. Ancak Java 2 platformu ile birlikte AWT yetersiz görülmüþ ve çok daha geniþ ve geliþmiþ özelliklere sahip Swing kütüphanesi sisteme eklenmiþtir. Özellikle çok platform destekleyen yazýlýmlarda kullanýcý arayüzü geliþtirme aracý olarak swing halen önemini korumaktadýr. Swing önceleri iþletim sisteminin kullandýðý donaným grafik hýzlandýrma araçlarýný kullanmadýðýndan yavaþlýðý ile eleþtirilere hedef olmuþtu. Özellikle Java 1.4 ile Swing, hem genel olarak sanal makinenin hýzlanmasý ve kýsmen donaným hýzlandýrmayý kullanmasý ile bu kötü þöhretinden sýyrýlmaya baþladý. Java 5 ve 6 ile donaným özellikle OpenGL-DirectX kullanýmý ve yeni arayüz gösterim þekli ile Java'nýn masaüstü uygulama geliþtirmede popülerleþmesi bekleniyor. AWT halen Swing'in bir alt katmanýnda, temel iki boyutlu grafik iþlemlerinde kullanýlmaya devam ediyor. ===SWT=== SWT swing'e bir alternatif olarak IBM tarafýndan geliþtirilen bir gösterim sistemidir. Swing'den en büyük farký çalýþtýðý iþletim sisteminin grafik kütüphanesi ve komutlarýný kullanmasýdýr. Bu nedenle SWT uygulamalarý Swing'e göre çoðu yerde daha hýzlý ve iþletim sistemindeki diðer uygulamalarý andýran bir þekilde çalýþmasýný saðlar. Swingin Java 1.5 ile performans açýðýný kapattýðý iddia edilse de SWT'nin de artýk Java camiasýnda kabul görmüþ bir sistem olduðu açýktýr. SWT'nin dezavantajý ise Java'nin bir parçasý olmamasýdýr. yani SWT uygulamalarý SWT kütüphanesi ile birlikte daðýtýlmaktadýr. Ayrýca SWT farklý iþletim sistemlerinde farklý olgunluk ve performansta iþlemektedir ve özellikle Windows dýþý sistemlerde henüz yeterince olgunlaþamamýþtýr. En bilinen SWT uygulamalarý ünlü java yazýlým geliþtirme aracý Eclipse ve Bittorrent uygulamasi Azureus'tur. ===Hot Spot Teknolojisi=== Sun tarafýndan geliþtirilen Java sanal makinesi HotSpot adý verilen özel bir teknolojiyi içinde barýndýrýr. HotSpot yani sýcak nokta, bir yazýlýmda sürekli olarak tekrarlanan ve üzerinden geçilen kod bölümlerine verilen bir isimdir. Hotspot sanal makinesi þu anda iki ayrý modda sanal makinenin çalýþmasýný saðlamaktadýr: Ýstemci (Client) ve Sunucu (Server) modlarý. Ýstemci modunda byte kod büyük ölçüde daha baþlangýçta JIT ile sistemin öz makine koduna dönüþtürülerek iþletilir ama çalýþma anýnda daha fazla iyileþtirme iþlemi gerçekleþtirilmez. Bir uygulamanýn hýzý istemci modunda zaman içinde bu nedenle deðiþmez. Sunucu modunda ise sanal makine baþlangýçta byte kodunu sistemin öz koduna dönüþtürmekte acele etmez. Bu nedenle sunucu modu baþlangýçta istemci modundan oldukça yavaþtýr. Program çalýþmaya devam ettikçe sanal makine yazýlýmdaki sýcak noktalarý tespit edip byte kodu sadece JIT ile makine koduna dönüþtürmekle kalmaz, ayrýca oldukça yoðun bir iyileþtirmeye de tabi tutar. Sonuçta sunucu modunda uygulamalar zaman içinde hýzlanýr, uzun soluklu uygulamalarýn bu nedenle sunucu modunda iþletilmesi önerilir. Mustang Kod adli Java SE 6'da istemci modunda da benzeri bir teknolojinin kullanýlmasý bekleniyor. Dolphin kod adli Java SE 7'de ise bu iki mod arasýndaki fark azalacaðýndan sistemin tek modda çalýþmasý bekleniyor. ===Uygulamacýk (Applet)=== Uygulamacýk(Applet), uzaktaki sistem üzerinden indirilip internet tarayýcý üzerinde çalýþtýrýlabilien java uygulamalarýna verilen isimdir. Java'nin son kullanýcýlar tarafýndan tanýnmasý uygulamacýk sayesinde olmuþtur dersek yanlýþ olmaz. Uygulamacýklar sisteme zarar veremeyecek bir þekilde tasarlanmýþtýr ve bugün özellikle oyun sitelerinde halen yaygýn olarak kullanýlmaktadýr. Ýçerisinde uygulamacýk olan bir sayfayý açmaya çalýþtýðýnýzda tarayýcýnýz otomatik olarak java sanal makinesini çalýþtýrýp ekranýn uygulamacýða ayrýlan bölümünde uygulamanýn çalýþmasýný saðlar. ===WebStart=== Webstart teknolojisi uygulama kurulum, güncelleme ve silme dertlerine deva olmak üzere tasarlanmýþ bir sistemdir. Özellikle Java 1.5 ile daha yaygýn kullanýlmaya baþlayacaðý tahmin edilen webstart teknolojisi kýsaca yazýlýmlarýn uzaktan yerel sisteme güvenli olarak kurulmasýný ve korumalý bir alanda çalýþtýrýlmasýný saðlar. Appletlerin bir sonraki adýmý olarak görülebilir. Bir webstart uygulamasýný kurmak için internet üzerindeki özel bir baðlantýya týklamak yeterlidir. Sistem otomatik olarak webstart sistemini çalýþtýrýp yazýlýmý java cep belleðine indirir. istenirse masaüstüne kýsayol koymasýný da saðlar. Daha sonra sistem çevrim-içi (on-line) ya da çevrim-dýþý (off-line) olarak çalýþtýrýlabilir, ve uzaktaki yazýlým güncellendiðinde otomatik olarak -istenirse- yerel makinedeki yazýlýmýn da güncelenmesi saðlanabilir. Kullanýcýnýn özel olarak izin vermesi halinde uygulama yerel sisteme eriþim hakký kazanabilir. Aksi takdirde webstart uygulamalarý sisteme yazma iþlemi gerçekleþtiremezler (yani virüs ve zararlý yazýlým tehlikesini son derece aza indirger.) ==Java Yazýmý(Ýmlasý)== Java yazým olarak C/C++ ile benzerlikler arz eder. Java'nýn yanýnda C#, Perl, JavaScript gibi diller de ayný dil ailesine aittir. Dalgalý(kývýrcýk) parantezler içerisindeki bloklar, ++ arttýrma ve -- azaltma iþleçleri bu dilin belirgin özelliklerindendir. ===Merhaba Uzay=== ====Uç birimde Merhaba Uzay!==== //// MerhabaUzay.java public class MerhabaUzay { public static void main(String args) { System.out.println("Merhaba Uzay!"); } } Java'da yazdýðýmýz programlarý derlememiz için öncelikle sýnýf adý ile ayný adý taþýyan dosya ismine sahip olmamýz gerekmektedir. Yukarýdaki örnek programý sýnýf ismi olan MerhabaUzay ifadesini kullanýp uzantýsý ile beraber MerhabaUzay.java ismi ile kaydedebiliriz. J2SDK veya benzer bir Java geliþtirme ortamý kurulu sistemimizde yazýlan uygulama aþaðýdaki þekilde derlenebilir. javac MerhabaUzay.java javac, yazýlan programý derleyerek .class uzantýlý bir dosya üretir. .class sýnýf dosyalarý JVM'de çalýþabilecek ByteCode'lar içeren sýnýf dosyalarýdýr. Örnek uygulamayý çalýþtýrmak için: java MerhabaUzay yazabiliriz. java komutu öncelikle Sýnýf yolunda (bknz Classpath) MerhabaUzay sýnýfýný arayacaktýr. Bulduðu taktirde MerhabaUzay sýnýfýnda main metodunu arayacaktýr. Eðer metod bulunur ise bu metod icra edilir. Merhaba Uzay! ==Ýlgili Makaleler== AspectJ

    Linkler

  • http://www.sun.com
  • http://java.sun.com
  • http://www.java.com
  • http://www.java.net
  • http://www.java-tips.org
  • http://www.javaalmanac.com
  • http://www.javalobby.com
  • http://www.meshplex.org/wiki/Java/Introduction_to_Java Full Java Tutorial Türkçe baðlantýlar:
  • http://www.mhsatman.com
  • http://www.thecoders.net
  • http://www.kodcu.com/kodcu/
  • http://ugur.wordpress.com/java-teknolojileri-ve-programlama-dili/
  • http://ffjava.tripod.com
  • http://www.cagataycebi.com/ Özgür Yazýlým Sayfalarý: Java Programlama Dersleri
  • http://www.javaci.net/ Javacý.net: Örnek Kodlar
  • http://www.mmistanbul.com/makaleler/makaleler.cfm?makale=java Java Programlama Giriþ Java Geliþtirme Platformlarý:
  • http://www.netbeans.com/ NetBeans
  • http://www.eclipse.org/ Eclipse
  • http://www.jetbrains.com/idea/ Jetbrains IDEA
  • http://www.jcreator.com/ JCreator
  • http://www.thefreecountry.com/programming/javaide.shtml

    Bu makale, online kullanýcý topluluðu tarafýndan oluþturulan ve düzenlenen özgür ansiklopedi projesi Wikipedia'nýn Türkçe versiyonu Vikipedi'deki Java (programlama dili) maddesinden kopyalanmýþtýr. Bu makale, GNU Özgür Belgeleme Lisansý ilkeleri kapsamýnda özgürce kullanýlabilir.
  • Ýlgili bilgi baþlýklarý

    Ýlgili bilgiler: 11 Aralýk 13 Kasým 13 Åžubat 1998 2000 2002 2004 2006 2008 29 Eylül