Java'ya sıfırdan başla, 1. ders: ilk program, veri tipleri, koşullar, döngüler ve sınıflar (açıklamalı)

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

  1. 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ç.
  2. Terminalde java -version ve javac -version yaz; ikisi de sürüm gösteriyorsa hazırsın.
  3. 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?

  1. Java’da her kod bir sınıfın (class) içinde yaşar. public her yerden erişilebilir demek.
  2. main, programın başlangıç noktası. Java programı çalıştırınca bu metodu arar. Şimdilik bu satırı kalıp olarak ezberlemen yeterli.
  3. System.out.println ekrana yazar ve alt satıra geçer. Her komut noktalı virgül (;) ile biter. Unutmak en sık hatadır.

:light_bulb: Java neden derlenir? javac kodunu 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

  1. Hesap sınıfına cek(double tutar) metodu ekle. Bakiye yetersizse çekime izin vermesin.
  2. main içinde iki farklı hesap oluştur ve birinden diğerine para transferi yapan bir transfer metodu yaz.

Kodunu bu konuya yapıştır, birlikte inceleyelim. Sonraki derste: ArrayList, HashMap ve hata yönetimi (try/catch).