Bölüm 5: Java'ya Giriş ve İlk Program
Çoktan Seçmeli · Java Çalışma Modeli
Soru 1: javac Nerede?
Java derleyicisi javac aşağıdakilerden hangisinin parçasıdır?
C: JDK = JRE + geliştirme araçları (javac, jar, javadoc…). JRE = JVM + sınıf kütüphanesi ve yalnızca çalıştırmak için yeterlidir. Program yazıp derleyecek geliştirici JDK kurar.
Çoktan Seçmeli · Java Çalışma Modeli
Soru 2: Derleme ve Çalıştırma Komutları
Merhaba.java dosyasını derleyip çalıştırmak için doğru komut sırası hangisidir?
B: javac dosya adını uzantısıyla alır ve Merhaba.class üretir. java komutuna ise sınıf adı verilir, .class uzantısı yazılmaz. D'de JVM "Merhaba.class" adlı bir sınıf arar ve bulamaz.
Adım Adım Çalıştırma · Java Çalışma Modeli
Soru 3: Konsol Oturumu
Klasörde yalnızca Merhaba.java var (ekrana Merhaba yazan program). Komutlar sırayla çalıştırılınca konsolda ne görünür?
Henüz Merhaba.class yok: JVM çalıştıracak sınıfı bulamaz.
Derleme başarılı: javac hiçbir şey yazmaz, yalnızca .class dosyası oluşur.
java sınıf adı bekler; "Merhaba.class" adlı sınıf aranır, bulunamaz. Uzantı yazılmaz!
Doğru komut: program çalışır.
Kaynak değişti ama yeniden derlenmedi: JVM eski .class'ı çalıştırır, yine Merhaba yazar.
Yeniden derleme sonrası değişiklik görünür: Selam. (Java 11+ sürümlerinde hata iletilerinin altına bir "Caused by" satırı da eklenir.)
> java Merhaba
> javac Merhaba.java
> java Merhaba.class
> java Merhaba
// Kaynakta "Merhaba" → "Selam" yapıldı
> java Merhaba
> javac Merhaba.java
> java MerhabaÇoktan Seçmeli · İlk Program
Soru 4: Programın Giriş Noktası
JVM'nin java Uygulama komutuyla programı başlatabilmesi için sınıfta hangi metot bulunmalıdır? (Klasik kural; Java 24 ve öncesi.)
C: public (her yerden erişilebilir), static (nesne oluşturmadan çağrılır), void (değer döndürmez), adı küçük harfle main, parametresi String[] args. A, B ve D derlenir ama JVM giriş noktasını bulamaz ve programı başlatmaz; Java büyük-küçük harfe duyarlıdır (Main ≠ main). (Java 25'ten beri static olmayan void main da giriş noktası olabilir; B ve D yine geçersizdir.)
Çoktan Seçmeli · İlk Program
Soru 5: Sınıf Adı ve Dosya Adı
Aşağıdaki kod Merhaba.java adlı dosyaya kaydedilip javac Merhaba.java ile derleniyor. Ne olur?
public class Selam { public static void main(String[] args) { System.out.println("x"); } }
A: public sınıfın adı dosya adıyla birebir (büyük-küçük harf dahil) aynı olmalıdır. Derleyici hatayı satır 1'de bildirir ve .class üretmez. Düzeltme: dosyayı Selam.java diye kaydetmek ya da sınıfı Merhaba diye adlandırmak.
Çıktı Sorusu · İlk Program
Soru 6: Satır Sonları
Aşağıdaki kodun çıktısı nedir? Kaç satır oluşur?
System.out.print("A");
System.out.println("B");
System.out.print("C");
System.out.print("D\n");
System.out.println();
System.out.print("E");Cevabı göster
AB CD E
print("A")veprintln("B")aynı satıra:AB, sonra satır sonu."D\n"içindeki\nsatırı bitirir:CD.println()boş bir satır üretir.E4. satıra yazılır; sonunda satır sonu yoktur.
Çıktı Sorusu · İlk Program
Soru 7: print ve println
Aşağıdaki kodun çıktısı nedir?
System.out.print("Merhaba ");
System.out.println("Dünya");
System.out.print("Java");Cevabı göster
Merhaba Dünya Java
printsatırı bitirmez:"Merhaba "ile"Dünya"aynı satıra yazılır.printlnyazdıktan sonra alt satıra geçer."Java"ikinci satıra yazılır; sonunda satır sonu yoktur.
Çıktı Sorusu · Kaçış Dizileri
Soru 8: Dört Kaçış Dizisi
Kodun çıktısı nedir? (Sekme durakları 8 karakterdir.)
System.out.println("Ad\tNot");
System.out.println("C:\\ders\\java");
System.out.println("\"Merhaba\"");
System.out.print("1\n2\n");Cevabı göster
Ad Not C:\ders\java "Merhaba" 1 2
\timleci sonraki sekme durağına (9. sütun) taşır: "Ad"dan sonra 6 boşluk görünür.\\tek bir ters eğik çizgi yazar.\"metni bitirmeden çift tırnak yazar.- Tek
printiki satır üretti:\nsatır sonu karakteridir.
Çoktan Seçmeli · Kaçış Dizileri
Soru 9: Dizgi İçinde \n
Aşağıdaki kodun çıktısı nedir?
System.out.println("Ali\nVeli");C: \n bir kaçış dizisidir ve satır sonu üretir; ekrana \ ve n yazılmaz. Çıktı iki satırdır: Ali, alt satırda Veli.
Çoktan Seçmeli · Kaçış Dizileri
Soru 10: Çift Ters Eğik Çizgi ve n
System.out.println("A\\nB"); deyiminin çıktısı nedir?
C: Kaynakta \\ bir kaçış dizisidir ve tek bir \ karakteri üretir; ardından gelen n sıradan bir harftir. Ekranda tek satırda A\nB görünür. Yeni satır için "A\nB" yazılmalıydı.
Çıktı Sorusu · Kaçış Dizileri
Soru 11: Windows Yolu Yazdırma
Aşağıdaki program derlenip çalıştırılmak isteniyor. Ne olur?
public class Yol { public static void main(String[] args) { System.out.println("Dosya: C:\yeni"); } }
Cevabı göster
Derleme hatası; program hiç çalışmaz:
Yol.java:3: error: illegal escape character
System.out.println("Dosya: C:\yeni");
^- Dizgi içinde
\bir kaçış dizisi başlatır;\ytanımlı bir kaçış dizisi değildir. - Düzeltme:
"Dosya: C:\\yeni"→ çıktıDosya: C:\yeni. "C:\new"derlenirdi ama\nyeni satır olurdu!
Çıktı Sorusu · Dizgi Birleştirme
Soru 12: Sayı mı, Dizgi mi?
Kodun çıktısı nedir?
System.out.println(5 + 3);
System.out.println("5 + 3");
System.out.println("5" + 3);
System.out.println(5 + 3 + "5");
System.out.println("5" + 5 + 3);Cevabı göster
8 5 + 3 53 85 553
- İki sayı: aritmetik toplama → 8. Tırnak içi her şey dizgidir →
5 + 3aynen. - Bir taraf dizgiyse
+birleştirme yapar: "5" + 3 → "53". - İşlem soldan sağa: 5 + 3 = 8 önce, sonra 8 + "5" → "85".
- "5" + 5 → "55", sonra "55" + 3 → "553".
Çoktan Seçmeli · Dizgi Birleştirme
Soru 13: Metin ve İki Sayı
Aşağıdaki kodun çıktısı nedir?
System.out.println("Toplam: " + 2 + 3);B: + soldan sağa işlenir. "Toplam: " + 2 bir String verir: "Toplam: 2". Ardından + 3 de birleştirme olur: Toplam: 23. Toplama için "Toplam: " + (2 + 3) yazılmalıdır.
Adım Adım Çalıştırma · Dizgi Birleştirme
Soru 14: Soldan Sağa Birleştirme
Her println içindeki ifade soldan sağa nasıl değerlendirilir?
İki int: aritmetik toplama.
Bir taraf String: artık birleştirme.
Dizgiye eklenen her sayı dizgi olarak eklenir: "334", "3345".
En soldaki işlenen zaten dizgi.
2 ve 3 toplanmaz, yan yana yazılır.
Parantez önce hesaplanır: 5, sonra metne eklenir.
* önceliklidir: iki çarpma önce yapılır.
Sonra soldan sağa birleştirme: 6=6.
public class Birlestir { public static void main(String[] args) { System.out.println(1 + 2 + "3" + 4 + 5); System.out.println("Toplam: " + 2 + 3); System.out.println("Toplam: " + (2 + 3)); System.out.println(2 * 3 + "=" + 2 * 3); } }
Çoktan Seçmeli · Dil Yapısı
Soru 15: Büyük-Küçük Harf
Bir öğrenci system.out.println("x"); yazıp derliyor. Ne olur?
A: Java büyük-küçük harfe duyarlıdır; System sınıfı büyük S ile yazılır. Derleyici system'i bir paket adı sanar ve bulamaz. Aynı nedenle sayi ve Sayi farklı adlardır.
Çoktan Seçmeli · Dil Yapısı
Soru 16: İfade mi, Deyim mi?
Aşağıdakilerden hangisi tek başına bir değer üreten ifadedir (noktalı virgülle biten bir deyim ya da blok değildir)?
C: İfade bir değer üretir (120 * 3 → 360). Deyim bir işlemi tamamlar ve çoğunlukla ; ile biter (A bildirim, B çağrı deyimi). D süslü parantezle gruplanmış bir bloktur. Bir deyimin içinde bir veya daha çok ifade bulunabilir.
Çıktı Sorusu · Açıklamalar
Soru 17: Hangi Satırlar Çalışır?
main içindeki bu kodun çıktısı nedir?
// System.out.println("1"); System.out.println("2"); // System.out.println("3"); /* System.out.println("4"); System.out.println("5"); */ System.out.println("6 // değil"); System.out.println("7 /* yorum değil */");
Cevabı göster
2 6 // değil 7 /* yorum değil */
- 1. satır baştan sona açıklama; 2. satırda
//'dan sonrası (3) açıklama. /* ... */iki satırı (4 ve 5) birlikte açıklama yapar.- Tırnak içindeki
//ve/* */açıklama değil, metnin parçasıdır; aynen yazılır.
Çıktı Sorusu · Açıklamalar
Soru 18: İç İçe Çok Satırlı Açıklama
Program derlenip çalıştırılmak isteniyor. Ne olur?
public class Ic { public static void main(String[] args) { /* dış /* iç */ kalan */ System.out.println("Merhaba"); } }
Cevabı göster
Derleme hatası; "Merhaba" hiç yazılmaz.
/* */açıklamaları iç içe olamaz: açıklama, ilk*/'da biter.- Geriye
kalan */kalır ve derleyici bunu kod sanır: javac "illegal start of expression" gibi bir hata bildirir, .class üretmez. - İçinde
/* */olan bir bloğu kapatmak için satırları//ile açıklama yapmak daha güvenlidir.
Çoktan Seçmeli · Hata Türleri
Soru 19: Hata Türünü Eşleştirme
Aşağıdaki eşleştirmelerden hangisi yanlıştır?
D yanlıştır: a + b / 2 derlenir ve çalışır, ama / önce yapıldığı için sonuç yanlıştır → mantık hatası. Söz dizimi ve tip hataları derleme sırasında yakalanır (.class üretilmez); tam sayı sıfıra bölme ise çalışırken ArithmeticException fırlatır.
Çoktan Seçmeli · Hata Türleri
Soru 20: cannot find symbol
javac şu iletiyi veriyor. En olası neden nedir?
S2.java:4: error: cannot find symbol
System.out.printn("y");
^
symbol: method printn(String)
location: variable out of type PrintStreamD: cannot find symbol derleyicinin bir adı (değişken, metot, sınıf) tanımadığını söyler; symbol: method printn(String) satırı hangi adın bulunamadığını gösterir. ^ işareti hatanın yerini işaret eder.
Çıktı Sorusu · Hata Türleri
Soru 21: Eksik Noktalı Virgül
Program javac Deneme.java ile derlenip java Deneme ile çalıştırılmak isteniyor. Ekranda ne görünür? "Bir" yazılır mı?
public class Deneme { public static void main(String[] args) { System.out.println("Bir"); System.out.println("İki") System.out.println("Üç"); } }
Cevabı göster
Deneme.java:4: error: ';' expected
System.out.println("İki")
^
1 error- Hata 4. satırın sonunda bildirilir; ^ eksik
;'nin yerini gösterir. - "Bir" de yazılmaz: derleme başarısız olduğu için Deneme.class üretilmez; program hiç çalışmaz.
- Önceden derlenmiş bir .class yoksa
java Deneme"Could not find or load main class" der.
Adım Adım Çalıştırma · Hata Türleri
Soru 22: Çalışma Zamanı Hatası
Program derleniyor. Çalıştırıldığında hangi satırlar çalışır, konsolda ne görünür?
javac kodu denetler: söz dizimi ve tipler doğru → Hata.class üretilir. 0'a bölme derleme hatası değildir.
JVM main'i çalıştırır: "Başla" yazılır.
x ve y bildirilir.
Tam sayı sıfıra bölünemez: JVM ArithmeticException fırlatır; iletide satır numarası (5) görünür.
Program durdu: 6. satır hiç çalışmaz, "Bitti" yazılmaz.
public class Hata { public static void main(String[] args) { System.out.println("Başla"); int x = 10, y = 0; System.out.println(x / y); System.out.println("Bitti"); } }
Çıktı Sorusu · Tasarım
Soru 23: Test Tablosu ile Hata Bulma
Kodlamadan önce bir test tablosu hazırlanmıştı. Bu program tablodaki üç girdi için ne yazdırır? Hangi testte beklenen çıktı tutmaz?
int n1 = 75, n2 = 80; // girdiler int ort = (n1 + n2) / 2; System.out.println(ort);
| Girdi | Beklenen |
|---|---|
| 70, 90 | 80 |
| 0, 0 | 0 |
| 75, 80 | 77.5 |
Cevabı göster
| Girdi | Çıktı | Sonuç |
|---|---|---|
| 70, 90 | 80 | geçti |
| 0, 0 | 0 | geçti |
| 75, 80 | 77 | kaldı |
- 155 / 2: iki int bölünür, kesir atılır → 77.
- Olağan durum ve alt sınır testleri hatayı göstermedi; toplamı tek sayı olan girdi (155) gösterdi. Farklı türde örnek girdiler seçmek bu yüzden önemlidir.
- Düzeltme:
double ort = (n1 + n2) / 2.0;→ 77.5.