Çoklu catch
- Java kursu
- Başlangıç
- Ders 110/116
- 5 dk
Birden çok catch bloğunu öğrenirsin.
Birden fazla catch bloğu
Bir try'dan sonra birden fazla catch gelebilir. Her biri farklı istisna türünü yakalar. Sıra önemlidir: özel tür önce, genel tür sonra yazılır.
try {
int n = Integer.parseInt(s);
int r = 10 / n;
} catch (NumberFormatException e) {
System.out.println("Sayı değil");
} catch (ArithmeticException e) {
System.out.println("Sıfıra bölme");
}Eğer genel türü önce yazarsan özel türler hiçbir zaman erişilemez olur ve derleme hatası alırsın. Bu yüzden Exception gibi genel türü en sona bırakmalısın. Her catch bağımsızdır; yalnızca biri çalışır.
Çoklu yakalama (multi-catch)
Java 7'den beri birden fazla türü tek catch'te yakalayabilirsin. Türler | ile ayrılır; bu yapıya multi-catch denir.
try {
int n = Integer.parseInt(s);
} catch (NumberFormatException | ArithmeticException e) {
System.out.println("Hata");
}Multi-catch aynı işlemi yapan farklı türler için kod tekrarını önler. Ancak | ile ayrılan türler arasında alt-üst ilişkisi olamaz; hepsi kardeş olmalıdır. e değişkeni örtük olarak final'dir; içinde değiştirilemez.
Uygulama İki türü ayrı catch ile yakala
String s = "abc"; tanımla. try içinde Integer.parseInt(s) ve int r = 10 / n; yaz. İlk catch NumberFormatException yakalayıp Sayı değil yazsın; ikinci catch ArithmeticException yakalayıp Sıfıra bölme yazsın.
Başlangıç kodu
public class Main {
public static void main(String[] args) {
String s = "abc";
// parseInt ve bölmeyi dene, iki ayrı catch ile yakala
}
}Örnek çözüm
try {
int n = Integer.parseInt(s);
int r = 10 / n;
System.out.println(r);
} catch (NumberFormatException e) {
System.out.println("Sayı değil");
} catch (ArithmeticException e) {
System.out.println("Sıfıra bölme");
}Beklenen çıktı
Sayı değil
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İkinci catch'i ekle
try {
int n = Integer.parseInt(s);
} catch (NumberFormatException e) {
System.out.println("Sayı değil");
} ____ (ArithmeticException e) {
System.out.println("Sıfıra bölme");
}
try {
int n = Integer.parseInt(s);
} catch (NumberFormatException e) {
System.out.println("Sayı değil");
} catch (ArithmeticException e) {
System.out.println("Sıfıra bölme");
}
Açıklama: ikinci catch ilkine özel farklı türü yakalar.
2 Çoklu catch bloklarında sıralama nasıl olmalıdır?
- Önce genel, sonra özel
- Önce özel, sonra genel Doğru cevap
- Yalnızca bir catch olur
- Sıra önemli değildir
Açıklama: özel tür önce yazılır; genel tür sona bırakılır, aksi halde derleme hatası alınır.
3 Senaryoyu yakalama türüyle eşleştir
| Kavram | Anlamı |
|---|---|
parseInt başarısız |
NumberFormatException |
sıfıra bölme |
ArithmeticException |
null nesne |
NullPointerException |
dizi dışı |
ArrayIndexOutOfBoundsException |