# Java Programlama Dili'nin Genel Ãzellikleri Java, dünyada web, mobil ve daha birçok alanda yaygın Åekilde kullanılan bir programlama dilidir. Ãzellikle, kurumsal düzeyde büyük yazılım projeleri gerçekleÅtirmek için çok uygundur. Java ile **Ãzgür Yazılım Lisansı**'na versiyonları kullanabilirsiniz. **OpenJDK** buna en güzel örnektir. Ayrıca, Java diliyle yazılım dünyasında ticari ve özgür yazılım lisansına sahip çok fazla geliÅtirme aracı mevcuttur. Java'yı güçlü kılan da arkasında bu büyük topluluklardır. Java dilinde Sınıf (Class) kavramı en önemli özelliktir. Java'da her Åeyi Sınıf Åeklinde tanımlamanız gerekmektedir. Sınıflar bir nesneyi tanımlayan Åablonlardır. ÃrneÄin: Kahve Makinesi gerçek hayatta bir nesneyi ifade eder. Yazılım dünyasında bu gerçek hayat nesnesini tasarlarken, "KahveMakinesi" isminde bir Åablon tasarlarız. Bu Åablon gerçek hayatta var olan nesneye ait tüm özellikleri bünyesinde barındırır. Bu nesneyi ele aldıÄımızda renk, uzunluk, geniÅlik, aÄırlık gibi nitelikleri vardır. Bu özellikler tasarladıÄımız "KahveMakinesi" isimli sınıfta birer deÄiÅkeni ifade eder. Suyu ısıtma, kahveyi karıÅtırma, kahveyi piÅirme gibi eylemler ise fonksiyonları ifade eder. Gerçek hayat nesnesine ait bu eylemler "KahveMakinesi" isimli sınıfta birer fonksiyon olarak tanımlanır. Böylece, yazılım dünyasında kahve makinesini modellemiÅ oluruz. Bu modelden veya Åablondan üretilenlere de nesne denilmektedir. "KahveMakinesi" isimli sınıftan bir fabrikada üretiliyormuÅ gibi onlarca nesne oluÅturulabilir. Her üretilen yazılımsal açıdan farklı bir nesneyi ifade eder. **Sınıf:** Gerçek hayatta yer alan bir nesnenin yazılım dünyasındaki model halidir. **Nesne:** Tasarlanan bu modelden üretilenlere de nesne denilmektedir. **Metot (Fonksiyon):** Fonksiyonlar eylemleri iÅaret eder. ÃrneÄin: Printer isimli bir sınıfa ait "print" isimli eylem yazılım dünyasında bir metodu ifade eder. Metotlar belli parametreler alarak veya almadan belli bir üreten veya üretmeyen kod parçalarıdır. **DeÄiÅken:** DeÄiÅkenler nesnenin niteliklerini iÅaret ederler. ÃrneÄin: Printer isimli sınıfa ait "color" isimli nitelik bir deÄiÅkeni ifade eder. EÄer rengi beyazsa beyaz bir deÄer alır. Java dilinde de sınıflar tasarlanır, bu sınıflardan nesneler üretilir. Bu nesneler birbirine baÄımlılıklar kurarlar ve böylece birbiriyle iletiÅim kurarak bir yazılımı meydana getirirler. Lego parçalarıyla büyük bir uçak yapmak gibi ï ## 1.Dilin Temel Kuralları - Java dilinde sınıf, metot, deÄiÅken gibi isimlendirme yapabildiÄiniz her Åey büyük küçük harf duyarlılıÄına sahiptir. Yani, Java'da "invoicePrice" ile "InvoicePrice" birbirinden farklı deÄiÅkenlerdir. - Sınıf isimlendirmesi yapılırken hep ilk harf büyük olacak Åekilde bir tanımlama yapılır. Dilde böyle bir kısıtlama olmasa da okunabilirlik için bu genel kabul görmüŠbir yaklaÅımdır. ÃrneÄin: "class **Printer**" gibi. - Metot (Fonksiyon) isimlerinin ilk harfi küçük ile baÅlayacak Åekilde, Camel (Deve) Case stilinde bir tanımlama yapılır. ÃrneÄin: "void **printInvoice** ()" gibi. - Java'da sınıfa ait kaynak kodlar ".java" uzantılı dosyaların içine yazılır. Bu dosya ismi sınıf ismi ile aynı olmalıdır. ÃrneÄin: "Printer.java" ise sınıf tanımı "class Printer" Åeklinde olmalıdır. - Java'da bir programın çalıÅması için bir baÅlangıç metoduna ihtiyaç duyar. "public static void main(String args[])" metod baÅlangıç metodur. ## 2.Java'da Tanımlayıcı İsimlendirme Kuralları (Identifier) Yazılım geliÅtiricinin sınıf, metot ve deÄiÅken gibi yapılar için yaptıÄı isimlendirmelere tanımlayıcı denilmektedir. ÃrneÄin: oluÅturulan sınıfa "CustomerService" isminin verilmesi gibi. Java dilinde isimlendirme yapılırken dikkat edilmesi gereken belli baÅlı hususlar vardır. Bunları aÅaÄıda listelenmiÅtir. - Java'da isimlendirme yaparken ilk karakter harf, $ iÅareti ve \_ (alt çizgi) ile baÅlayabilir. Rakam ve sayı isimlendirmenin baÅında yer alamaz. İlk karakteri belirtilen Åekilde kurallara uygun verirseniz geri kalanında dilediÄiniz gibi isimlendirmeye devam edebilirsiniz. - Java diline özel ayrılmıŠanahtar kelimeler vardır. Bunları da deÄiÅken ismi olarak kullanamazsınız. ÃrneÄin: class, int, for, while gibi anahtar sözcükler tek baÅlarına bir tanımlayıcı olarak kullanılamazlar. - Java'da yaptıÄınız isimlendirme büyük küçük harf duyarlılıÄına sahiptir. "maxAge" ile "MAXAGE" iki ayrı tanımlayıcıyı ifade etmektedir. ## 3.Java'da Düzenleyiciler (Modifiers) Java'da tanımladıÄınız sınıflara, metotlara, deÄiÅkenlere baÅka kod bloklarından eriÅimi düzenleyen anahtar kelimelere düzenleyiciler (modifier) denilmektedir. Bu belirteçler ikiye ayrılmaktadır. - EriÅim Belirteçleri: **default, public, private, protected** gibi anahtar kelimeler ile ifade edilir. Bu belirteçler yazılan sınıfın, metotun kendi kapsamı dıÅında bir noktadan eriÅimini yönetir. ÃrneÄin: "public" anahtar sözcüÄü ile eriÅime açılır. "private" ile dıÅarıdan eriÅime kapatılır. - EriÅim DıÅındaki Belirteçler: **final, abstract, strictfp** gibi anahtar kelimeleri ifade edilir. Bu sözcükler eriÅim ile ilgili deÄildir. ÃrneÄin: "final" sözcüÄü sınıfın, metotudun veya deÄiÅkenin davranıÅını etkiler. ## 4.Java'da DeÄiÅkenler (Variables) Java'da bir veri parçasını, ki bu sayı, yazı alanı veya kompleks veri olabilir, hafızada tutmaya yarayan yapılardır. ÃrneÄin: " **int year = 2019;**" gibi tanımlama yaptıÄımızda hafıza bir alan bu deÄer için ayrılır. 2019 verisi hafıza bu adrese yazılır. DeÄiÅken, hafıza adresini iÅaret eder. Aslında, hafıza adresinin kendisini belirtir. DeÄiÅkenler üç tiptedir: - Yerel DeÄiÅkenler - Sınıf DeÄiÅkenleri (Statik olanlar) - Nesne DeÄiÅkenleri (Statik olmayanlar) ## 5.Java'da Diziler (Arrays) Dizi kavramı liste halinde veriler tutmaya yarayan veri yapısıdır. ÃrneÄin: 12 aya ait Åirket bilançosu dizi Åeklinde tutulabilecek bir veridir. Java'da diziler oluÅturulduÄunda Heap Hafıza'da tutulurlar. Dizi konusu ileride detaylıca iÅlenecektir. ## 6.Java'da Enum Yapılar (Enum) Java'da belirli seçenekleri önceden tanımlanabilen yapılar Åeklinde kodlayabilirsiniz. ÃrneÄin: maÄazanın müÅteri iki tipte ise bunları ENTERPRISE, INDIVIDUAL Åeklinde iki tanımlı deÄerle ifade edebilirsiniz. Böylece, koddaki okunabilirliÄi arttırabilirsiniz. MüÅteri tiplerini 1 ve 2 gibi sayılarla ifade etseydik, kodun baÅkası tarafından okunabilirliÄi azalırdı. ## 7.Java'da Anahtar Sözcükler (Keywords) AÅaÄıdaki anahtar sözcükler Java dilinde ayrılmıŠkelimelerdir. Bu kelimeleri tek baÅlarına isimlendirmede kullanamazsınız. ÃrneÄin: " **int class = 5;**" Åeklinde bir tanımlama yapamayız. Ãünkü, class ayrılmıŠbir anahtar sözcüktür.  ## 8.Java'da Yorum Alanları (Comments) Java dilinde kodların arasına açıklayıcı metinler eklenebilir. Kod parçasının ne iÅ yaptıÄını anlatan veya bilgi veren yorumlar eklenebilir. Bu yorumlar derleyici tarafından dikkate alınmaz. Tek satırlık veya çok satırlı yorumlar ekleyebilirsiniz. ```java public class MyFirstJavaProgram { /* This is my first java program. * This will print 'Hello World'; as the output * This is an example of multi-line comments. */ public static void main(String []args){ // This is an example of single line comment /* This is also an example of single line comment. */ System.out.println("Hello World"); } } ``` Java'da kod yazarken kodlar arasında dilediÄiniz kadar boÅluk bırakabilirsiniz. ## 9.Java'da Kalıtım (Inheritance) Java, nesneye dayalı programlamayı destekleyen bir dil olduÄu için kalıtım mekanizmasına sahiptir. Kalıtım ile bir sınıf üst sınıfından ortak özellikleri miras yoluyla kendine alabilir. Bu konu ileride detaylıca açıklanacaktır. ## 10.Java'da Ara yüzler (Interfaces) Nesneye dayalı programlamanın en önemli kavramlarından biri de ara yüz tanımıdır. Arayüz tanımlarıyla çok biçimliliÄi ( **Polymorphism** ) desteklenir. Ara yüz (Interface) kontrat gibi deÄerlendirilebilir. ÃrneÄin: aracın frenleme sistemi, elektrik sistemi tüm araçlarda bulunması gereken özelliklerdir. Fakat, bunların çalıÅma biçimi araçtan araca farklılıklar gösterebilir. İÅte bu özellik kümesi bir aracın ara yüzü olarak tanımlanabilir. Böylece, yeni bir araç tanımlamak isteyen herkes bu kontrata uygun bir yapı kurmalıdır.