Java; bankacılık sistemlerinden Android’in temeline ve büyük kurumsal yazılımlara kadar her yerde kullanılan, sağlam ve tip güvenli bir dil. Python’a göre biraz daha “resmî” yazılır ama bu disiplin seni iyi bir programcı yapar. Bu derste temelleri, her satırı açıklayarak öğreniyoruz.
Kurulum
- Bir JDK (Java Development Kit) kur. Ücretsiz ve yaygın bir seçenek Eclipse Temurin (adoptium.net). LTS (uzun süreli destek) yazan güncel sürümü seç.
- Terminalde
java -versionvejavac -versionyaz; ikisi de sürüm gösteriyorsa hazırsın. - Editör olarak IntelliJ IDEA Community (ücretsiz) ya da VS Code + Java eklentisi kullanabilirsin.
1. İlk program
Merhaba.java adında bir dosya oluştur (dosya adı sınıf adıyla birebir aynı olmalı):
public class Merhaba { // 1
public static void main(String[] args) { // 2
System.out.println("Merhaba, SiberNöbet!"); // 3
}
}
Çalıştırmak için terminalde:
javac Merhaba.java # derler: insanın okuduğu kodu Merhaba.class dosyasına (bytecode) çevirir
java Merhaba # çalıştırır: Java Sanal Makinesi (JVM) bytecode'u çalıştırır
Ne yapıyor?
- Java’da her kod bir sınıfın (class) içinde yaşar.
publicher yerden erişilebilir demek. main, programın başlangıç noktası. Java programı çalıştırınca bu metodu arar. Şimdilik bu satırı kalıp olarak ezberlemen yeterli.System.out.printlnekrana yazar ve alt satıra geçer. Her komut noktalı virgül (;) ile biter. Unutmak en sık hatadır.
Java neden derlenir?
javackodunu bytecode’a çevirir. Bu bytecode Windows, Linux ya da macOS fark etmeksizin JVM olan her yerde çalışır. Java’nın meşhur sloganı buradan gelir: “Bir kez yaz, her yerde çalıştır.”
2. Değişkenler ve tipler
int yas = 21; // tam sayı
double boy = 1.68; // ondalıklı sayı
boolean ogrenci = true; // doğru/yanlış
char harf = 'A'; // tek karakter: TEK tırnak
String isim = "Mehmet"; // metin: ÇİFT tırnak (String büyük harfle başlar)
System.out.println(isim + " " + yas + " yaşında."); // + metinleri birleştirir
Ne yapıyor? Python’dan farklı olarak Java’da her değişkenin tipini baştan söylersin. int yas dedikten sonra yas = "yirmi"; yazarsan program derlenmez bile. Bu, hataları program çalışmadan önce yakalamanı sağlar. Java’nın büyük projelerde tercih edilmesinin bir sebebi bu.
3. Koşullar
int puan = 72;
if (puan >= 85) { // koşul parantez içinde, blok süslü parantez içinde
System.out.println("Pekiyi");
} else if (puan >= 50) {
System.out.println("Geçti"); // ekrana bu yazılır
} else {
System.out.println("Kaldı");
}
Ne yapıyor? Python’daki if/elif/else ile aynı mantık. Farkı: koşul parantez içinde, blok süslü parantez içinde yazılır. Girinti okunabilirlik içindir, zorunlu değildir (ama mutlaka girinti kullan).
4. Döngüler
for (int i = 1; i <= 5; i++) { // başlangıç; devam koşulu; her turdan sonra artış
System.out.println(i + " x 7 = " + (i * 7));
}
String[] meyveler = {"elma", "armut", "kiraz"}; // dizi (array): sabit uzunlukta liste
for (String meyve : meyveler) { // "for-each": her eleman için bir kez döner
System.out.println(meyve.toUpperCase());
}
int sayac = 3;
while (sayac > 0) { // koşul doğru olduğu sürece döner
System.out.println("Geri sayım: " + sayac);
sayac--; // 1 azalt; yazmazsan döngü bitmez
}
Ne yapıyor? Klasik for üç parçadan oluşur: int i = 1 (başla), i <= 5 (bu doğru oldukça devam et), i++ (her turdan sonra 1 artır). for-each ise bir dizinin elemanlarını tek tek gezmenin kısa yolu.
5. Sınıf ve nesne: Java’nın kalbi
Java nesne yönelimli bir dildir: gerçek dünyadaki şeyleri sınıflarla modelleriz.
public class Hesap { // "Hesap" isimli bir kalıp (sınıf)
private String sahip; // alanlar: private = sınıfın dışından doğrudan erişilemez
private double bakiye;
public Hesap(String sahip) { // kurucu (constructor): new Hesap(...) dendiğinde çalışır
this.sahip = sahip; // this.sahip = bu nesnenin alanı, sahip = gelen parametre
this.bakiye = 0;
}
public void yatir(double tutar) { // metot: void = geriye değer döndürmez
if (tutar <= 0) {
System.out.println("Geçersiz tutar");
return; // metottan erken çık
}
bakiye += tutar;
}
public double getBakiye() { // "getter": private alanı güvenli şekilde okutur
return bakiye;
}
public static void main(String[] args) {
Hesap h = new Hesap("Zeynep"); // new: kalıptan gerçek bir nesne üretir
h.yatir(250);
h.yatir(-50); // "Geçersiz tutar" yazar, bakiye değişmez
System.out.println(h.getBakiye()); // 250.0
}
}
Ne yapıyor? Hesap bir kalıp, new Hesap("Zeynep") o kalıptan üretilmiş gerçek bir nesne. Bakiyeyi private yaparak dışarıdan h.bakiye = 1000000; gibi bir hileyi engelliyoruz; bakiye sadece yatir metodundaki kontrollerden geçerek değişebiliyor. Buna kapsülleme (encapsulation) denir. Hem iyi yazılımın hem de güvenli yazılımın temel ilkelerinden biridir.
Ödev
Hesapsınıfınacek(double tutar)metodu ekle. Bakiye yetersizse çekime izin vermesin.mainiçinde iki farklı hesap oluştur ve birinden diğerine para transferi yapan birtransfermetodu yaz.
Kodunu bu konuya yapıştır, birlikte inceleyelim. Sonraki derste: ArrayList, HashMap ve hata yönetimi (try/catch).