⚠️ Java Exception Handling (İstisna Yönetimi): En İyi Uygulamalar ve Örneklerle Rehber
Bu rehberde, Java'da istisnaları (exceptions) etkili şekilde yönetmeyi öğreneceksiniz.
try-catch-finally, throw ve throws yapılarının nasıl kullanıldığını, Java İstisna Hiyerarşisini, özel (custom) istisna oluşturmayı ve en iyi uygulamaları adım adım inceleyeceğiz.
🧠 Teknik Özet
Konu: Java Exception Handling mekanizması
Amaç: Program akışını bozan hataları (ör. dosya bulunamaması, ağ hatası, null değerler) güvenli şekilde yönetmek
Çözülen Problem: Programın beklenmedik şekilde çökmesini önlemek
Adımlar:
- İstisna kavramını öğren
- try, catch, finally, throw, throws sözcüklerini uygula
- Exception hiyerarşisini tanı
- Java 7 yeniliklerini keşfet (try-with-resources, multi-catch)
- Özel istisna sınıfları oluştur
🚨 Java’da İstisna (Exception) Nedir?
Bir istisna, programın çalışması sırasında oluşan ve normal akışı bozan bir olaydır.
Java bu durumları nesne tabanlı bir sistemle yönetir.
Örnek hata senaryoları:
- Kullanıcının yanlış veri girmesi
- Dosyanın bulunamaması
- Ağ bağlantısının kesilmesi
- Donanım veya bellek hatası
🔑 Java Exception Yönetimi Anahtar Kelimeleri
| Anahtar Kelime | Açıklama |
|---|---|
throw | Kod içinde manuel olarak istisna fırlatır. |
throws | Metot imzasında, fırlatılabilecek istisnaları bildirir. |
try | Hata oluşturabilecek kod bloğunu kapsar. |
catch | Belirli türdeki hataları yakalayıp işler. |
finally | Hata olsa da olmasa da her zaman çalışır. |
💻 Örnek Kod: İstisna Fırlatma ve Yakalama
package com.rabisu.exceptions;
import java.io.FileNotFoundException;
import java.io.IOException;
public class RabisuIstisnaOrnegi {
public static void main(String[] args) throws FileNotFoundException, IOException {
try {
testException(-5);
testException(-10); // Önceki hata nedeniyle çalışmaz
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} finally {
System.out.println("Kaynaklar serbest bırakılıyor...");
}
testException(15); // try-catch dışında -> programı sonlandırır
}
public static void testException(int i) throws FileNotFoundException, IOException {
if (i < 0) throw new FileNotFoundException("Negatif tamsayı: " + i);
else if (i > 10) throw new IOException("Sadece 0–10 arası desteklenir");
}
}
➡️ throw ile hata fırlatılır, throws ile metot uyarılır. ➡️ finally her durumda çalışarak kaynakları serbest bırakır.
🧩 Java İstisna Hiyerarşisi
| Tür | Açıklama | Örnek |
|---|---|---|
| Error | Sistemsel hatalar, genellikle yakalanmaz ve program dışı sebeplerden kaynaklanır. | OutOfMemoryError, StackOverflowError |
| Checked Exception | Öngörülebilir hatalardır, mutlaka try-catch ile yakalanmalı veya throws ile bildirilmelidir. | IOException, FileNotFoundException |
| Runtime Exception | Kodlama hatalarından doğar, derleme zamanı zorunluluğu yoktur. | NullPointerException, ArrayIndexOutOfBoundsException |
⚙️ Java 7 Yenilikleri
1. Try-with-Resources
try (MyResource mr = new MyResource()) {
System.out.println("Kaynak oluşturuldu ve kullanılacak");
} catch (Exception e) {
e.printStackTrace();
}
➡️ Kaynaklar otomatik kapanır, finally gerekmez.
2. Çoklu Catch Blokları
catch (IOException | SQLException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
}
➡️ Birden fazla hata türünü tek satırda yakalayabilirsiniz.
🧱 Özel (Custom) Exception Oluşturma
public class MyException extends Exception {
private String errorCode = "Bilinmeyen_Hata";
public MyException(String message, String errorCode) {
super(message);
this.errorCode = errorCode;
}
public String getErrorCode() {
return this.errorCode;
}
}
➡️ Bu sınıf, hata mesajı yanında özel hata kodları da taşır. ➡️ Exception’dan türediği için Checked Exception’dır.
💡 En İyi İstisna Yönetimi Uygulamaları
| Pratik | Açıklama |
|---|---|
| Spesifik Exception kullanın | FileNotFoundException gibi türler hata kaynağını net gösterir. |
| Erken Fırlatın (Fail-fast) | Hataları oluşmadan önce yakalayın. |
| Geç Yakalayın (Catch Late) | Sadece anlamlı şekilde işleyebileceğiniz yerde yakalayın. |
| Kaynakları kapatın | try-with-resources veya finally kullanın. |
| Boş catch bloklarından kaçının | Hata mesajını mutlaka loglayın. |
| Custom exception kullanın | Kodun okunabilirliğini ve hata yönetimini kolaylaştırır. |
| Performansı düşünün | Gereksiz exception fırlatmayın. |
| Javadoc ile belgeleyin | @throws etiketi ile hangi istisnaların oluşabileceğini belirtin. |
💬 Sıkça Sorulan Sorular (SSS)
- try bloğu tek başına kullanılabilir mi?
Hayır, yanında catch veya finally olmalıdır.
- Checked Exception nedir?
Kodda öngörülebilen hatalardır; yakalanmak ya da throws edilmek zorundadır.
- Runtime Exception nedir?
Programlama hatasından kaynaklanır ve genelde NullPointerException gibi durumları kapsar.
- finally ne işe yarar?
Kaynakları kapatır, hata olsa bile çalışır.
- Custom Exception neden kullanılır?
Özel hata türleriyle daha anlaşılır hata yönetimi sağlar.
✅ Sonuç
Java Exception Handling, uygulamalarınızı daha dayanıklı ve profesyonel hale getirir. try-catch-finally yapısını, doğru istisna türlerini ve en iyi uygulamaları öğrenerek kodunuzun güvenilirliğini artırabilirsiniz.
☁️ Şimdi deneyin: Rabisu Bulut platformunda bir Java geliştirme ortamı oluşturun ve istisna yönetimi örneklerini test edin.
yaml