Skip to main content

⚠️ 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:

  1. İstisna kavramını öğren
  2. try, catch, finally, throw, throws sözcüklerini uygula
  3. Exception hiyerarşisini tanı
  4. Java 7 yeniliklerini keşfet (try-with-resources, multi-catch)
  5. Ö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 KelimeAçıklama
throwKod içinde manuel olarak istisna fırlatır.
throwsMetot imzasında, fırlatılabilecek istisnaları bildirir.
tryHata oluşturabilecek kod bloğunu kapsar.
catchBelirli türdeki hataları yakalayıp işler.
finallyHata 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ürAçıklamaÖrnek
ErrorSistemsel 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 ExceptionKodlama 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ı

PratikAçıklama
Spesifik Exception kullanınFileNotFoundException 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ıntry-with-resources veya finally kullanın.
Boş catch bloklarından kaçınınHata mesajını mutlaka loglayın.
Custom exception kullanınKodun okunabilirliğini ve hata yönetimini kolaylaştırır.
Performansı düşününGereksiz exception fırlatmayın.
Javadoc ile belgeleyin@throws etiketi ile hangi istisnaların oluşabileceğini belirtin.

💬 Sıkça Sorulan Sorular (SSS)

  1. try bloğu tek başına kullanılabilir mi?

Hayır, yanında catch veya finally olmalıdır.

  1. Checked Exception nedir?

Kodda öngörülebilen hatalardır; yakalanmak ya da throws edilmek zorundadır.

  1. Runtime Exception nedir?

Programlama hatasından kaynaklanır ve genelde NullPointerException gibi durumları kapsar.

  1. finally ne işe yarar?

Kaynakları kapatır, hata olsa bile çalışır.

  1. 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