← Kursa Dön
📄 Text · 12 min

İlk Programın: Hello World

Her programlama dilinde ilk yazılan program "Hello World" olur. Bu gelenek 1978'de Brian Kernighan ve Dennis Ritchie'nin "The C Programming Language" kitabından geliyor. Java'da da geleneği bozmayacağız.

Ama biz sadece kodu yazıp geçmeyeceğiz. Her satırı, her kelimeyi, her noktalı virgülü tek tek açıklayacağız. Bu dersin sonunda Java'nın temel yapısını anlayacak ve kendi basit programlarını yazabileceksin.


Kodumuz

İşte en basit Java programı:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Merhaba Dünya!");
    }
}

Çıktı:

Merhaba Dünya!

Sadece 5 satır kod. Ama bu 5 satırda Java'nın birçok temel kavramı gizli. Şimdi bunları teker teker açalım.


Satır Satır İnceleme

public class HelloWorld {

Bu satır bir sınıf (class) tanımlıyor. Java'da her şey bir sınıfın içinde yaşar — sınıfsız kod yazamazsın.

  • `public`: Bu sınıfın her yerden erişilebilir olduğunu belirtir. Erişim belirleyicileri (access modifiers) ileri derslerde detaylıca işleyeceğiz.

  • `class`: Sınıf tanımladığımızı söyleyen anahtar kelime.

  • `HelloWorld`: Sınıfın adı. Sen belirlersin ama kuralları var (birazdan açıklayacağız).

  • `{`: Sınıfın gövdesinin başladığı yer. Kapanış } en sonda.

Bir sınıfı dosya klasörü gibi düşün. Tüm kodun bu klasörün içinde organize edilir.

⚠️ Dikkat: Dosya adı, public sınıf adıyla birebir aynı olmalı. Bu sınıf HelloWorld ise dosya HelloWorld.java olmak zorunda. helloworld.java veya Hello_World.java olmaz. Java büyük-küçük harf duyarlıdır (case-sensitive).

public static void main(String[] args) {

Bu satır main metodu — programın giriş noktası. JVM programı çalıştırdığında ilk buraya bakar.

Her kelimeyi açalım:

  • `public`: JVM'in bu metoda dışarıdan erişebilmesi için public olması gerekiyor.

  • `static`: Bu metodun çalışması için sınıftan bir nesne oluşturmaya gerek yok. JVM doğrudan çağırabilir. Static kavramını ilerleyen derslerde detaylıca işleyeceğiz.

  • `void`: Bu metodun geriye bir değer döndürmediğini belirtir. void = boş, hiçbir şey.

  • `main`: Metodun adı. Bu özel bir isim — JVM tam olarak main arar. Main, MAIN, maIn olmaz.

  • `String[] args`: Komut satırından programa gönderilen argümanları alır. Şimdilik boş olsa bile yazmak zorundasın.

  • `{`: Metod gövdesinin başlangıcı.

Bu satırı bir kapı olarak düşün. JVM programını çalıştırmak istediğinde bu kapıdan girer. Kapı yoksa veya farklı görünüyorsa, JVM içeri giremez ve hata verir.

System.out.println("Merhaba Dünya!");

Bu satır ekrana metin yazdırır. Java'da en sık kullanacağın satırlardan biri.

  • `System`: Java'nın standart kütüphanesindeki bir sınıf. Sistemle (ekran, klavye, ortam değişkenleri) etkileşimi sağlar.

  • `.out`: System sınıfının standart çıkış akışı (standard output). Yani ekran.

  • `.println`: "Print Line" — metni yazdır ve bir alt satıra geç.

  • `"Merhaba Dünya!"`: Yazdırılacak metin. Çift tırnak içinde yazılır.

  • `;`: Satır sonu. Java'da her ifade (statement) noktalı virgülle biter.

} ve }

İlk } main metodunu kapatır. İkinci } HelloWorld sınıfını kapatır. Her açılan süslü parantezin bir kapanışı olmalı.


Yazdırma Komutları: println vs print vs printf

Java'da ekrana yazdırmanın birkaç yolu var:

println — Yazdır ve Alt Satıra Geç

public class YazdirmaOrnekleri {
    public static void main(String[] args) {
        System.out.println("Birinci satır");
        System.out.println("İkinci satır");
        System.out.println("Üçüncü satır");
    }
}

Çıktı:

Birinci satır
İkinci satır
Üçüncü satır

Her println çağrısından sonra otomatik olarak alt satıra geçer. println = print + line (yeni satır).

public class PrintOrnegi {
    public static void main(String[] args) {
        System.out.print("Merhaba ");
        System.out.print("Dünya");
        System.out.println("!");  // Son olarak alt satıra geç
    }
}

Çıktı:

Merhaba Dünya!

print yazdırır ama aynı satırda kalır. Son çıktıdan sonra println kullanarak alt satıra geçmeyi unutma.

printf — Formatlı Yazdırma

public class PrintfOrnegi {
    public static void main(String[] args) {
        String isim = "Ali";
        int yas = 25;
        double not = 3.75;

        System.out.printf("Ad: %s, Yaş: %d, Not: %.2f%n", isim, yas, not);
    }
}

Çıktı:

Ad: Ali, Yaş: 25, Not: 3.75

printf'de format belirleyicileri kullanılır:

  • %s → String (metin)

  • %d → Integer (tam sayı)

  • %f → Float/Double (ondalıklı sayı)

  • %.2f → Ondalıklı sayı, virgülden sonra 2 basamak

  • %n → Yeni satır (platform bağımsız)


Derleme ve Çalıştırma Süreci

IDE'de "Run" butonuna bastığında arka planda iki adım gerçekleşir. Bunları manuel olarak da yapabilirsin:

Adım 1: Derleme (javac)

javac HelloWorld.java

Bu komut:

  1. HelloWorld.java dosyasını okur

  2. Söz dizimi kontrolü yapar (hata varsa gösterir)

  3. Bytecode üretir → HelloWorld.class dosyasını oluşturur

Adım 2: Çalıştırma (java)

java HelloWorld

Bu komut:

  1. JVM'i başlatır

  2. HelloWorld.class dosyasını yükler

  3. main metodunu bulur ve çalıştırır

  4. Program bitince JVM kapanır

HelloWorld.java  ──javac──>  HelloWorld.class  ──java──>  Ekran çıktısı
  (kaynak kod)                 (bytecode)                  "Merhaba Dünya!"

⚠️ Dikkat: java HelloWorld.class şeklinde .class uzantısını yazma. Sadece sınıf adını yaz: java HelloWorld.


Komut Satırı Argümanları (args)

main metodundaki String[] args parametresini hatırladın mı? Bu, programa dışarıdan değer göndermeni sağlar.

public class Selamlama {
    public static void main(String[] args) {
        if (args.length > 0) {
            System.out.println("Merhaba, " + args[0] + "!");
        } else {
            System.out.println("Merhaba, yabancı!");
        }
    }
}
javac Selamlama.java

java Selamlama Ali
# Çıktı: Merhaba, Ali!

java Selamlama
# Çıktı: Merhaba, yabancı!

args[0] ilk argümanı, args[1] ikinci argümanı verir. args.length toplam argüman sayısını döndürür.

Birden fazla argüman da gönderebilirsin:

public class ArgOrnek {
    public static void main(String[] args) {
        System.out.println("Toplam argüman: " + args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "] = " + args[i]);
        }
    }
}
java ArgOrnek Java çok güzel
# Çıktı:
# Toplam argüman: 3
# args[0] = Java
# args[1] = çok
# args[2] = güzel

Yorum Satırları (Comments)

Yorum satırları, kodun içine açıklama yazmak için kullanılır. Derleyici bunları tamamen görmezden gelir — çıktıyı etkilemezler.

Tek Satırlık Yorum

public class YorumOrnegi {
    public static void main(String[] args) {
        // Bu bir yorum satırı. Derleyici bunu atlar.
        System.out.println("Bu çalışır"); // Satır sonunda da yorum olabilir
        // System.out.println("Bu çalışmaz — yorum içinde");
    }
}

// işaretinden satır sonuna kadar her şey yorumdur.

Çok Satırlı Yorum

public class CokSatirYorum {
    public static void main(String[] args) {
        /* Bu bir çok satırlı yorum.
           İstediğin kadar satır yazabilirsin.
           Hepsi derleyici tarafından atlanır. */
        System.out.println("Merhaba!");

        /* Tek satırda da kullanabilirsin */
    }
}

/* ile başlar, */ ile biter. Aradaki her şey yorumdur.

Javadoc Yorumu

/**
 * Bu sınıf selamlama yapmak için kullanılır.
 * Javadoc aracıyla HTML dokümantasyonu üretilebilir.
 *
 * @author Tolgahan
 * @version 1.0
 */
public class Selamlama {
    /**
     * Verilen isimle selamlama yapar.
     *
     * @param isim Selamlanacak kişinin adı
     * @return Selamlama mesajı
     */
    public static String selamla(String isim) {
        return "Merhaba, " + isim + "!";
    }
}

/** ile başlar, */ ile biter. Normal yorumdan farkı: javadoc aracı bu yorumları otomatik API dokümantasyonuna çevirir. @author, @param, @return gibi özel etiketler kullanılır.

Yorum Yazma İpuçları

İyi yorum:

// Kullanıcının yaşını kontrol et — 18 altı kayıt yapamaz
if (yas < 18) { ... }

Kötü yorum (gereksiz):

// i'yi 1 artır
i++;

Kodun ne yaptığını değil, neden yaptığını açıklayan yorumlar yaz. Kod zaten ne yaptığını gösterir.


Escape Karakterleri

String içinde özel karakterler kullanmak istediğinde escape karakterleri kullanırsın. \ (backslash) ile başlarlar.

public class EscapeOrnegi {
    public static void main(String[] args) {
        // Yeni satır
        System.out.println("Birinci satır\nİkinci satır");

        // Tab (sekme)
        System.out.println("İsim:\tAli");
        System.out.println("Yaş:\t25");

        // Çift tırnak
        System.out.println("Java dedi ki: \"Merhaba!\"");

        // Backslash
        System.out.println("Dosya yolu: C:\\Users\\Ali");

        // Tek tırnak (char tipinde kullanılır)
        char harf = '\'';
    }
}

Çıktı:

Birinci satır
İkinci satır
İsim:	Ali
Yaş:	25
Java dedi ki: "Merhaba!"
Dosya yolu: C:\Users\Ali

En çok kullanılan escape karakterleri:

KarakterAnlamı
\nYeni satır (new line)
\tTab (sekme)
\"Çift tırnak
\\Backslash
\'Tek tırnak
\rSatır başı (carriage return)

Text Blocks (Java 13+)

Çok satırlı metinler yazmak için escape karakterleri kullanmak zahmetli olabilir. Java 13'te text blocks özelliği geldi:

public class TextBlockOrnegi {
    public static void main(String[] args) {
        // Eski yöntem — escape karakterleriyle
        String eskiYontem = "{\n" +
                "  \"isim\": \"Ali\",\n" +
                "  \"yas\": 25\n" +
                "}";

        // Yeni yöntem — text block
        String yeniYontem = """
                {
                  "isim": "Ali",
                  "yas": 25
                }
                """;

        System.out.println(eskiYontem);
        System.out.println("---");
        System.out.println(yeniYontem);
    }
}

Text block """ ile başlar ve """ ile biter. İçinde \n ve \" kullanmana gerek kalmaz. Özellikle JSON, HTML, SQL gibi çok satırlı metinlerde çok kullanışlı.


Analoji: Java Programı Bir Mektup Gibidir

Java programının yapısını bir resmi mektup gibi düşün:

  • Sınıf (class) → Mektup zarfı. Her mektup bir zarfın içinde olmalı.

  • main metodu → Mektubun "Sayın..." ile başlayan açılış kısmı. Okuyucu buradan okumaya başlar.

  • println satırları → Mektubun içeriği. Ne söylemek istiyorsan buraya yazarsın.

  • Süslü parantezler `{}` → Zarfın kapağı. Açılan kapak kapatılmalı.

  • Noktalı virgül `;` → Cümle sonu noktası. Her cümlenin sonunda olmalı.

JVM de bir mektup okuyan kişi gibi — zarfı açar (sınıfı yükler), açılış kısmını bulur (main metodu arar), ve metni okumaya başlar (kodu çalıştırır).


Yaygın Hatalar ve Çözümleri

Yeni başlayanların en sık yaptığı hataları görelim:

Hata 1: Sınıf adı ve dosya adı uyuşmuyor

// Dosya adı: hello.java
public class HelloWorld {  // HATA! Dosya adı HelloWorld.java olmalı
    ...
}

Hata mesajı: class HelloWorld is public, should be declared in a file named HelloWorld.java

Hata 2: main metodunun imzası yanlış

// HATALI — static yok
public void main(String[] args) { }

// HATALI — String[] args yok
public static void main() { }

// HATALI — büyük-küçük harf
public static void Main(String[] args) { }

// DOĞRU
public static void main(String[] args) { }

Hata mesajı: Main method not found in class HelloWorld

Hata 3: Noktalı virgül unutulmuş

System.out.println("Merhaba")  // HATA! ; yok

Hata mesajı: ';' expected

Hata 4: String'de çift tırnak eksik

System.out.println(Merhaba);  // HATA! Tırnaklar yok

Hata mesajı: cannot find symbol — Java, Merhaba'yı bir değişken adı sanır.

Hata 5: Süslü parantez eksik

public class Test {
    public static void main(String[] args) {
        System.out.println("Test");
    // } eksik!
}

Hata mesajı: reached end of file while parsing

💡 İpucu: Hata mesajlarını okumayı öğren. Java'nın hata mesajları genellikle hangi satırda ne olduğunu söyler. HelloWorld.java:3: error: gibi bir mesaj gördüğünde 3. satıra bak.


Birden Fazla Sınıf

Bir dosyada birden fazla sınıf olabilir ama sadece bir tanesi public olabilir ve dosya adı o sınıfın adıyla aynı olmalı:

// Dosya adı: Program.java
public class Program {
    public static void main(String[] args) {
        System.out.println("Ana program");
    }
}

class Yardimci {
    // Bu sınıf public değil, aynı dosyada olabilir
    static void mesajGoster() {
        System.out.println("Yardımcı sınıftan merhaba");
    }
}

Pratikte her sınıfı kendi dosyasına koymak en iyi pratiktir. Ama küçük örneklerde birden fazla sınıf aynı dosyada olabilir.


Pratik Örnekler

Örnek 1: Kişisel Kart

public class KisiselKart {
    public static void main(String[] args) {
        System.out.println("╔══════════════════════════╗");
        System.out.println("║   İSİM: Ali Yılmaz      ║");
        System.out.println("║   YAŞ: 22               ║");
        System.out.println("║   BÖLÜM: Bilgisayar Müh ║");
        System.out.println("║   HOBBY: Coding         ║");
        System.out.println("╚══════════════════════════╝");
    }
}

Örnek 2: Basit Hesaplama

public class BasitHesap {
    public static void main(String[] args) {
        int a = 15;
        int b = 7;

        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("a + b = " + (a + b));
        System.out.println("a - b = " + (a - b));
        System.out.println("a * b = " + (a * b));
        System.out.println("a / b = " + (a / b));
        System.out.println("a % b = " + (a % b));
    }
}

Çıktı:

a = 15
b = 7
a + b = 22
a - b = 8
a * b = 105
a / b = 2
a % b = 1

Dikkat: a / b sonucu 2 çıkıyor, 2.14 değil. Çünkü ikisi de int (tam sayı) tipinde. Tam sayılar bölünürse sonuç da tam sayı olur ve ondalık kısım atılır. Bu konuyu veri tipleri dersinde detaylıca göreceğiz.

Örnek 3: String Birleştirme

public class StringBirlestirme {
    public static void main(String[] args) {
        String ad = "Java";
        int versiyon = 21;
        boolean populer = true;

        // + operatörü ile birleştirme
        String mesaj = ad + " " + versiyon + " kullanıyoruz. Popüler mi? " + populer;
        System.out.println(mesaj);

        // printf ile formatlı yazdırma
        System.out.printf("%s %d kullanıyoruz. Popüler mi? %b%n", ad, versiyon, populer);
    }
}

Çıktı:

Java 21 kullanıyoruz. Popüler mi? true
Java 21 kullanıyoruz. Popüler mi? true

Programın Çalışma Akışı

Java programının ömrünü adım adım görelim:

1. Sen kodu yazarsın (HelloWorld.java)
       ↓
2. javac derler → HelloWorld.class (bytecode)
       ↓
3. java komutu → JVM başlar
       ↓
4. JVM, HelloWorld.class dosyasını yükler
       ↓
5. JVM, "public static void main(String[] args)" arar
       ↓
6. Bulursa → main metodundaki kodu satır satır çalıştırır
   Bulamazsa → "Main method not found" hatası verir
       ↓
7. main metodu bitince program sonlanır

Bu akışı kafana kazı. Java'nın her programı bu döngüden geçer.


Özet

  • Java'da her program bir sınıf içinde yaşar. Dosya adı ve public sınıf adı birebir aynı olmalıdır.

  • `main` metodu programın giriş noktasıdır: public static void main(String[] args) — imzası aynen bu şekilde olmalı.

  • `System.out.println()` ekrana yazdırır ve alt satıra geçer. print() alt satıra geçmez. printf() formatlı yazdırır.

  • Derleme javac Dosya.java, çalıştırma java Dosya komutuyla yapılır.

  • Yorum satırları // (tek satır), /* */ (çok satır), /** */ (Javadoc) ile yazılır.

  • Her ifade noktalı virgül (;) ile biter, kod blokları süslü parantez ({}) ile sarılır.