# Java Nedir? ## Java Nedir? Java açık kaynak kodlu, platform baÄımsız, yüksek performanslı ve Nesneye Dayalı Programlama'yı (Object Oriented Programming) tamamıyla destekleyen bir yazılım geliÅtirme dilidir. Java ile geliÅtirilen bir yazılım uygulaması Java Virtual Machine (Java Sanal Makinesi) yüklü olan herhangi bir bilgisayarda veya cihazda sorunsuz çalıÅabilir. Java aynı zamanda geliÅtirme platformunun kendisidir. Yazılım geliÅtirebilmeye imkan tanıyan ve geliÅtirilen bu yazılımın çalıÅtırılmasını saÄlayan altyapıya verilen isimdir. Java bir programlama dili olmasının yanı sıra saÄladıÄı bu imkanlarla birlikte platforma da ismini vermiÅtir. JDK, JRE bahsettiÄimiz platformun kendisidir. Java hızlı, güvenli ve güvenilir özelliklere sahiptir. Masaüstü uygulamalarından, web tabanlı uygulamalara, mobil uygulama geliÅtirmeden gömülü sistem uygulamalarına kadar çok geniÅ bir çerçevede kullanılmaktadır. Ãzel sektörde kurumsal firmalarda, akademik alanlarda bilimsel çalıÅmalarda da sıkça tercih edilmektedir. **Bir kez yaz ve her yerde çalıÅtır Java'nın en önemli sloganıdır.** WORA (Write Once, Run Anywhere). ### Java'nın Ãzellikleri - **Java platform baÄımsız bir dildir.** Bu Java'nın en önemli özelliklerinden biridir. Bu özelliÄine yukarıda kısaca deÄinmiÅtik. ÃrneÄin C, C# gibi diller platform baÄımlıdır. Ãünkü makinenin iÅletim sisteminde derlenirler. Java'yı platform baÄımsız kılan özelliÄi yazılan kaynak kodlar derlendikten sonra ara bir dil olan byte code'a çevrilmesidir. Ara dile çevrilen bu kod parçaları Java Virtual Machine vasıtasıyla yorumlanır ve çalıÅtırılır. Buradaki tek sorun hız sorunudur. Ãünkü iÅletim sistemiyle birlikte Virtual Machineâde bilgisayarın kaynaklarını kullandıÄı için daha yavaŠçalıÅmaktadır. - **Java Nesneye Dayalı programlamaya tamamıyla uygun bir dildir.** Java'da her Åey nesnelerden ibarettir. Sınıflar oluÅturularak daha az kod yazıp daha fazla iÅ yaparak kod tekrarı önlenmiÅ olur. Böylece geliÅtirme sürecinin verimliliÄi artar. Nesne oluÅturma bir sınıf içerisinde gerçekleÅtirilir ve bu kodlar baÅka projelerde kullanılabilir. - **Java öÄrenmesi basit bir dildir.** Gramer (Syntax) olarak C/C++ tabanlı bir yaklaÅıma sahiptir. Java'da pointers(iÅaretçiler), operator overloading(operatör aÅırı yüklemesi), hafıza yönetimi gibi karmaÅık olabilecek ve programcının sıkça hata yapabileceÄi yöntemler, mekanizmalar programcının sorumluluÄundan alınıp dilin bünyesine yerleÅtirilmiÅtir. Böylece, programcının yapabileceÄi hatalara karÅın bir soyutlama saÄlanmıÅtır. Garbage Collection (Ãöp Toplayıcısı) mekanizması ile kullanılmayan nesnelerin hafızadan temizlenmesi iÅi Java tarafından üstlenilmiÅtir. ÃrneÄin C++ dili ile yazdıÄımız programı, Javaâda daha az kod satırı ile yazabiliriz. - **Java kararlı bir programlama dilidir.** Java ile yazılan uygulamalar sorunsuz derlendiyse sonsuza dek her platformda çalıÅabilirler. Güçlü bir hafıza yönetim mekanizması vardır. Hata yakalama sistemi ile kararlılıÄı arttırır. - **Java, Multi-Thread (Ãok Kanallı) programlamayı varsayılan olarak destekler.** Ãok kanallı programlama yapabilmek için dilin bünyesinde gerekli altyapı ve imkanlar mevcuttur. Ãok kanallı programlama ile geliÅtirmiÅ olduÄunuz yazılım aynı anda network üzerinden bir dosya indirme iÅlemi yaparken, bir yanda da veritabanına çeÅitli kayıtların yazılabilmesini saÄlayabilir. Bu sizlerin bilgisayarınızda müzik dinlerken aynı anda bir Microsoft Word programını kullanabilmeniz gibi bir durumdur. Ãzetle eÅ zamanlı iÅlemleri programlayabilmenize imkan tanır. - **DaÄıtık sistemler ve Web programlama yapabilmenize imkan tanır.** İnternetin yaygınlaÅması ve Javaânın çıkıŠtarihi aynı döneme denk geldiÄi için Java aÄ sistemleri ile iç içedir. Java ile network (aÄlar) üzerinde çalıÅabilecek daÄıtık sistemler programlayabiliriz. TCP/IP, HTTP ve Socket gibi alt yapılar ile bunları gerçekleÅtirebiliriz. Remote Method Invocation (RMI) ve REST tabanlı servis özellikleri sayesinde daÄıtık bir Åekilde haberleÅme imkanı saÄlamaktadır. Servlet, Java Server Page gibi alt yapılar ile Web programlama da yapılabilmektedir. JSP, sunucu tarafında çalıÅan dinamik web uygulamaları geliÅtirmeye yarayan bir dildir. YazılmıŠJSP sayfasının Java koduna dönüÅtürülmüŠÅekli de Servletâdir. - **Gömülü sistemlerde programlama imkanı saÄlar.** JavaME platformu ile gömülü sistemlerde Java ile geliÅtirmeler yapabilirsiniz. ## Java Tarihçesi Javaâyı iyi bir Åekilde anlamak için, geçmiÅini, oluÅturulmasının amaçlarını ve motivasyonunu bilmek gerekir. DiÄer baÅarılı programlama dillerinde de olduÄu gibi, Java kendinden önce gelen dillerin baÅarısız özelliklerini azaltmıŠveya tamamen yok etmiÅ, iyi özelliklerini ise bünyesinde toplamıŠve geliÅtirmiÅtir. Java, doÄrudan C++ ile baÄlantılıdır. C++ ise Cânin devamıdır. Java, karakteristik özelliklerinin birçoÄunu bu iki dilden almıÅtır. Cânin sözdizimi (syntax), C++âın ise nesne yönelimli programlama (object oriented programming- OOP) kavramları Javaâya miras kalmıÅtır. Bunun yanı sıra, Java, bu dillerdeki karmaÅıklıÄı ortadan kaldırmıÅ, eksik özelliklerini ise tamamlamıÅtır. 1991 yılında Sun Microsystems'de (Åu an bu firma Oracle tarafından satın alınmıÅtır.) çalıÅan James Gosling'e ve arkadaÅlarına birçok cihazda ve bilgisayarda platform baÄımsız Åekilde çalıÅabilecek bir dil ortaya çıkarmaları için görev verildi. Onlar da C++ dilini inceledikten sonra, yeni bir dil ortaya çıkarıp bu hedefi gerçekleÅtirmeye karar verdiler. Ofislerinin önündeki aÄaçtan esinlenerek bu dile MeÅe anlamına gelen "Oak" adını verdiler. Fakat aynı isimde baÅka bir dil olduÄu fark edilince, kahvehanede bulunan bu dili geliÅtiren grup buradaki kahve markasından esinlenerek Java ismini vermiÅlerdir. Java sembolündeki kahve fincanı buradan gelmektedir. Ardından, 1 yıl kadar sonra geliÅtirilen tüm teknolojiler Java 1.0 adı altında toplanıldı. Bu teknoloji Star7 isimli bir el bilgisayarı ve Time Warner Åirketi için ise bir televizyon decoder cihazı geliÅtirme projelerinde kullanıldı. (Java logosundaki Duke karakteri bu sistemlerde yardımcı sihirbazlıÄı yapan modülün simgesiydi ï) Fakat, projelerde istenilen baÅarı saÄlanamadı. Ardından, proje sonucu geliÅtirilen Java dili kullanılmama durumuna gelme tehlikesiyle karÅı karÅıya kaldı. 1990'lı yılların baÅında yaygınlaÅmaya baÅlayan bir teknoloji olan World Wide Web üzerine yoÄunlaÅmaya baÅladılar ve dil üzerindeki çalıÅmalarını bu teknoloji üzerine kurgulamaya baÅladılar. 23 Mayıs 1995 yılında da Java resmi olarak duyuruldu. Artık, internet tarayıcılarında Java tabanlı uygulamaların çalıÅması devri baÅlamıÅtı. Java'nın 2. sürümü ile birlikte sadece tarayıcılarda çalıÅan uygulamalar yazmaya imkan veren bir yapıdan, temel nesneye dayalı kurumsal bir programlama diline doÄru dönüÅmeye baÅladı. Dilin daha kolay kullanımını saÄlayan özellikler ise Java 5 ile geldi. Java 6 ve Java 7 ile dilin olgunlaÅması ve kurumsal projelerde sıkça kullanılır hale gelmesi saÄlandı. Java 8 ile dile Stream API, Lambda Expressions (Lambda Tanımlamaları) gibi çok önemli yenilikler getirildi. Java Versiyon Tarihçesi(**Detay:** [https://en.wikipedia.org/wiki/Java\_version\_history](https://en.wikipedia.org/wiki/Java_version_history)) - JDK Alpha ve Beta (1995) - JDK 1.0 (23 Ocak 1996) - JDK 1.1 (19 Åubat 1997) - J2SE 1.2 (8 Aralık 1998) - J2SE 1.3 (8 Mayıs 2000) - J2SE 1.4 (6 Åubat 2002) - J2SE 5.0 (30 Eylül 2004) - Java SE 6 (11 Aralık 2006) - Java SE 7 (28 Temmuz 2011) - Java SE 8 (18 Mart 2014) - Java SE 9 (21 Eylül 2017) - Java SE 10 (20 Mart 2018) - Java SE 11 (25 Eylül 2018) - Java SE 12 (19 Mart 2019) - Java SE 13 (17 Eylül 2019) - Java SE 14 (17 Mart 2020) - Java SE 15 (15 Eylül 2020) ## C# Etkisi Javaânın ortaya çıkıÅı birçok programcıyı etkilemiÅtir. Microsoft, 1990âların sonunda C# dilini geliÅtirmiÅtir. C# doÄrudan Javaâdan etkilenen bir dildir. İki dil arasındaki benzerlikler o kadar fazladır ki, bu dillerden birini öÄrenen neredeyse diÄerini de öÄrenmiÅ gibi olur. ## Anahtar Kelimeler Javaâyı geliÅtiren ekip, Javaânın sahip olduÄu özellikleri bazı anahtar kelimelerle belirtmiÅtir. Bu kelimelere kısaca göz atalım: - **Simple (basit)**: Java, programcıların kolayca öÄrenmesi ve verimli bir Åekilde kodlayabilmesi amacıyla tasarlanmıÅtır. C ve C++ dillerinden etkilense de bu dillerdeki bazı zorluklar Java için söz konusu deÄildir. Bu dilleri bilen kiÅiler için Javaâyı öÄrenmek ve kullanmak zor olmayacaktır. - **Object-Oriented (nesne yönelimli):** Java, nesne yönelimli bir programlama dilidir. Nesne yönelimli programlama daha sonra ayrıntıyla açıklanacaktır. - **Robust (güçlü):** Java, güçlü ve stabil bir dildir. Güçlü hata yönetim mekanizması sayesinde hataları tespit etmek, tekrar etmek ve çözmek kolaydır. Java ile yazılan kodlar hem derleme aÅamasında (compile time) hem de çalıÅma aÅamasında (runtime) sıkı bir Åekilde kontrol edildiÄi için istisnai durumlara nadiren rastlanır. Ãstelik daha önce de belirttiÄimiz gibi platform baÄımsız olması, yazdıÄınız kodun farklı platformlarda stabil bir Åekilde çalıÅmasını saÄlar. - **Multithreaded (çok kanallı):** Java, geliÅen teknolojileri destekleyen bir dildir. İÅlemci mimarisinin geliÅmesi ve çok kanallı uygulamaların yaygınlaÅması nedeniyle, Java dili doÄrudan çok kanallı programlamayı destekleyecek Åekilde geliÅtirilmiÅtir. Javaânın kullanması kolay senkronizasyon yöntemleri sayesinde çok kanallı uygulamalar geliÅtirmek oldukça kolaydır. - **Distributed (daÄıtık):** Java, daÄıtık sistemler geliÅtirmeyi destekleyen bir dildir. ### Sorular **1-** Java programlama dili neden platform baÄımsızdır? **2-** Java programlama dili günümüzde hangi firma tarafından geliÅtirilmektedir? **3-** Java programlama dili ile geliÅtirilebilecek uygulamalar nelerdir? **4-** Java'nın multithread özelliÄi barındırmasının avantajı nedir? **5-** Java'da kullanılmayan veya iÅi biten nesnelerin hafızadan temizlenmesi iÅi hangi mekanizma ile saÄlanmaktadır? ### Cevaplar **1-** Kaynak program derlenerek byte kodu yaratılır. Byte kodu Java derleyicisi olan her bilgisayarda çalıÅır. CPU ve iÅletim sistemine baÄlı deÄildir. **2-** Oracle **3-** Mobil, masaüstü, grafiksel ve web tabanlı uygulamalar geliÅtirilebilir. **4-** EÅ zamanlı iÅlemleri programlayabilmemize imkan tanır. **5-** Garbage Collection