İ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
mainarar.Main,MAIN,maInolmaz.`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ırHer println çağrısından sonra otomatik olarak alt satıra geçer. println = print + line (yeni satır).
print — Yazdır, Alt Satıra Geçme
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.75printf'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.javaBu komut:
HelloWorld.javadosyasını okurSöz dizimi kontrolü yapar (hata varsa gösterir)
Bytecode üretir →
HelloWorld.classdosyasını oluşturur
Adım 2: Çalıştırma (java)
java HelloWorldBu komut:
JVM'i başlatır
HelloWorld.classdosyasını yüklermainmetodunu bulur ve çalıştırırProgram 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üzelYorum 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\AliEn çok kullanılan escape karakterleri:
| Karakter | Anlamı |
|---|---|
\n | Yeni satır (new line) |
\t | Tab (sekme) |
\" | Çift tırnak |
\\ | Backslash |
\' | Tek tırnak |
\r | Satı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! ; yokHata mesajı: ';' expected
Hata 4: String'de çift tırnak eksik
System.out.println(Merhaba); // HATA! Tırnaklar yokHata 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 = 1Dikkat: 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? trueProgramı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ırBu 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ırmajava Dosyakomutuyla 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.
AI Asistan
Sorularını yanıtlamaya hazır