# Java ile İlk Uygulama ## Komut Satırı ile ilk uygulama Bilgisayarımızda herhangi bir IDE olmadan da yazılan Java kodları derlenip, çalıÅtırılabilmektedir. Bunun için bir yazı editörü ve Java'nın sisteminizde yüklü olması yeterlidir. İlk örneÄimizi bu yolla oluÅturup, Java altyapısının kodu derleme, byte code'a (ara koda) dönüÅtürme ve sonrasında JVM vasıtasıyla yorumlayıp çalıÅtırılabilmesinden bahsedeceÄiz. Ayrıca, yazdıÄımız basit Java programı hakkında kısa bilgiler vereceÄiz. Ãnce bir yazı editörü(notepad) açıp içine aÅaÄıdaki kodları yazıyoruz. ```java class MyFirstProgram{ public static void main(String args[]){ System.out.println("Hello Java! | Merhaba Java!"); } } ``` Dosya uzantısı .txt olarak deÄil " **.java**" olarak kaydedilir. Java'da kaynak kod dosyaları ".java" uzantılıdır. Terminal(Komut İstemi) açılır. Terminal komutları ile kaydedilen dosyanın uzantısına gidilir. Ardından, "javac dosyaadı.java" komutu çalıÅtırılır. Java kaynak kodumuzu derlemek (Compile) için JDK içinde yer alan "javac" isimli yazılımdan faydalanırız.  Derleme iÅlemi sonrasında byte code'a çevrilmiÅ " **.class**" uzantılı bir dosya üretilecektir.  byte code'a çevirme iÅleminden sonra, yazdıÄımız uygulamayı çalıÅtırmak istersek artık "MyFirstProgram.class" dosyasını kullanacaÄız. Java Virtual Machine (JVM), **ClassLoader** vasıtasıyla bu Class dosyasını yükleyecek, ardından byte code'u kontrolden geçirecek ve makine koduna çevirip çalıÅtırılmasını saÄlayacak.  DerlenmiÅ olan " **MyFirstProgram.class**" dosyasını JDK içinde var olan " **java**" yazılımı ile çalıÅtırıyoruz. Kaynak kodun içinde yazdıÄımız gibi ekrana " **Hello Java! | Merhaba Java!**" ifadesini basmaktadır. ## Intellij IDE ile ilk uygulama İntellij IDE açılır. Açık bir java uygulaması yok ise Create New Project, var ise File -> New -> Project.. seçilir. AÅaÄıdaki ekran açılır. Bu ekranda oluÅturduÄumuz projenin ne projesi olduÄu (Java,Maven,Gradle..) belirlenir. Temel Java için sol menüden Java seçilir. Project SDK alanında kurulan JDK versiyonu seçilir. Additional Libraries kısmında herhangi bir seçim yapmadan ilerlenir.  Herhangi bir template kullanmayacaÄımız için seçim yapmadan ilerlenir.  Project name alanına projenin ismi(mümkünse türkçe karakter kullanılmadan), Project location alanına projenin yaratılmak istenildiÄi path girilir.  Proje oluÅturulduÄunda sol tarafta projenin dizini, saÄ tarafta ise kod yazacaÄımız alan yer alır. Dizin altında src(source) klasöründe kodlar yer alır. src üzerine saÄ tıklayıp New -> Package seçilir ve yeni pakete ad verilip oluÅturulur. Package oluÅturmadan direkt Java Classâı oluÅturup çalıÅtırabilirdik fakat büyük projelerde yazdıÄımız kodun daha düzenli olması ve bazı eriÅim yetkileri için package oluÅturulmalıdır. OluÅturulan package'a saÄ tıklanarak New -> Java Class seçilerek oluÅturulacak Java Class'ına isim verilir. Java projesinin çalıÅması için main method tanımlaması yapılmalıdır. Bir uygulama run edildiÄi an proje main method içinden baÅlar. O yüzden main methodu olmayan Java projelerini çalıÅtıramayız. Projeyi çalıÅtırmak için Run->Run "classismi" seçilir. Proje çalıÅtırıldıÄında JVM aracılıÄı ile kod bytecode'a dönüÅtürülerek out dizini altında .class uzantılı dosyanın oluÅturulduÄu görülür. main method içerisindeki çıktı konsolda görüntülenir.  Programdaki kodlara yakından bir bakalım. BahsettiÄimiz kavramlar ileride daha detaylı bir Åekilde açıklanacaktır. " **class**" anahtar sözcüÄü ile Java'da bir sınıf tanımı yaparız. Java, Nesneye Dayalı Programlama paradigmasını tamamıyla destekleyen bir dil olduÄu için Java'da her Åey nesnelerden oluÅur. Nesne'leri ise sınıflar vasıtasıyla adeta bir taslak olarak modelleriz. Nesne ise bu taslaktan oluÅturulmuÅ varlıÄı ifade eder. "class" bir sabun kalıbı ise, kalıptan üretilen her sabun ise o sınıftan üretilmiÅ nesnelerdir. " **public**" anahtar sözcüÄü Java'da eriÅim belirteci olarak kullanılır. Aslında, herkes tarafından eriÅebilmeyi ifade eder. EÄer, "private" olarak tanımlasaydık bu durumda dıÅarıdan eriÅilemez olacaktı. " **static**" anahtar sözcüÄü Java'da sınıftan herhangi bir nesne üretmeden ilgili deÄiÅkeni veya metodu çaÄırabilmeyi ifade eder. ÃrneÄin: MyFirstProgram.createMagicObject() Åeklinde nesne üretmeden direkt sınıf üzerinden bir çaÄrım yapabiliyorsak bu static bir metoddur. Sınıflar içinde deÄiÅkenler ve metodlar / fonksiyonlar yer almaktadır. Böylece bir sınıfı Åekillendirebiliriz. DeÄiÅkenler daha çok nitelikleri ifade ederken, örneÄin: arabanın rengi, uzunluÄu, geniÅliÄi gibi, metodlar / fonksiyonlar ise daha çok eylemleri ifade eder. ÃrneÄin: startComputerMemoryCheck() isminde bir fonksiyon bilgisayar ait hafızayı kontrol etme eylemini ifade eder. Eylemler ve nitelikler gerçek hayattaki nesneleri modellememizde de kullanılır. Bu nedenle nesneye dayalı yazılım paradigması gerçek hayat problemlerinin çözümüne doÄal olarak çok uygundur. " **void**" bir metod deÄer döndürmeyecekse bu anahtar sözcük kullanılır. Fonksiyonlar bünyelerinde belirli aksiyonları icra ettikten sonra eÄer ortaya bir sonuç çıkıyorsa bunu çaÄrıldıkları yere döndürebilirler. Bunlara deÄer döndüren fonksiyonlar denir. " **main**" ana programin fonksiyon ismini ifade eder. "**String[] args**" Java programı komut istemcisinden çalıÅtırılırken komut istemcisinden programa ekstra parametreler gönderebilirsiniz. Bu ekstra deÄerler "args" isimli deÄiÅken vasıtasıyla gelir. "**System.out.println()**" JDK içinde tanımlı statik bir fonksiyondur. Konsol ekranına bir Åeyler yazdırmak istenirse kullanılır.