İçeriğe geç

Exception Handling (Hata Yönetimi)

Exception (istisna), program çalışırken oluşan beklenmedik hatalardır.
Java’da bu hatalar Exception Handling (hata yönetimi) mekanizmasıyla kontrol altına alınabilir.

💡 Hataları yönetmek, programın çökmesini önler.


TürAçıklamaÖrnek
Checked ExceptionDerleme zamanında kontrol edilirIOException, SQLException
Unchecked ExceptionÇalışma zamanında oluşurNullPointerException, ArithmeticException
ErrorCiddi sistem hataları (müdahale edilmez)OutOfMemoryError, StackOverflowError

try {
int sonuc = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Hata: " + e.getMessage());
}

💡 try bloğundaki hata catch bloğunda yakalanır.


try {
int[] sayilar = {1, 2, 3};
System.out.println(sayilar[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Dizi sınırı aşıldı!");
} catch (Exception e) {
System.out.println("Genel bir hata oluştu.");
}

📌 Spesifik hatalar genel Exception bloğundan önce yazılmalıdır.


finally bloğu, hata olsa da olmasa da her zaman çalışır.

try {
int sonuc = 10 / 2;
System.out.println("Sonuç: " + sonuc);
} catch (Exception e) {
System.out.println("Bir hata oluştu.");
} finally {
System.out.println("İşlem tamamlandı.");
}

✅ Genellikle dosya kapatma, bağlantı sonlandırma gibi temizlik işlemleri burada yapılır.


throw, manuel olarak hata fırlatmak için kullanılır.

public class Test {
static void yasKontrol(int yas) {
if (yas < 18) {
throw new ArithmeticException("Yaş 18'den küçük olamaz!");
} else {
System.out.println("Giriş başarılı!");
}
}
public static void main(String[] args) {
yasKontrol(16);
}
}

💡 throwtek bir istisna fırlatmak için kullanılır.


Bir metodun hangi hataları fırlatabileceğini belirtir.

import java.io.*;
public class DosyaOkuma {
static void oku() throws IOException {
FileReader f = new FileReader("veri.txt");
f.read();
f.close();
}
public static void main(String[] args) {
try {
oku();
} catch (IOException e) {
System.out.println("Dosya bulunamadı!");
}
}
}

📘 throws, metot bildiriminde,
throw ise metot içinde kullanılır.


🔹 8. Custom Exception (Özel Hata Sınıfı)

Section titled “🔹 8. Custom Exception (Özel Hata Sınıfı)”

Kendi hata türünüzü oluşturabilirsiniz.

class YasHatasi extends Exception {
public YasHatasi(String mesaj) {
super(mesaj);
}
}
public class Main {
static void yasKontrol(int yas) throws YasHatasi {
if (yas < 18) {
throw new YasHatasi("Yaş 18'den küçük!");
}
}
public static void main(String[] args) {
try {
yasKontrol(15);
} catch (YasHatasi e) {
System.out.println("Hata: " + e.getMessage());
}
}
}

💡 extends Exception → Checked Exception
extends RuntimeException → Unchecked Exception


🔹 9. Çoklu Exception Yakalama (Java 7+)

Section titled “🔹 9. Çoklu Exception Yakalama (Java 7+)”

Birden fazla hatayı tek catch bloğunda yakalayabilirsiniz.

try {
int[] dizi = new int[3];
dizi[5] = 10 / 0;
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("Birden fazla hata yakalandı: " + e);
}

🔹 10. Nested try-catch (İç İçe Yapı)

Section titled “🔹 10. Nested try-catch (İç İçe Yapı)”
try {
try {
int a = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("İç blok hatası: " + e.getMessage());
}
} catch (Exception e) {
System.out.println("Dış blok hatası: " + e.getMessage());
}

🧩 11. Örnek: Kullanıcıdan Sayı Alma

Section titled “🧩 11. Örnek: Kullanıcıdan Sayı Alma”
import java.util.Scanner;
public class SayıGirisi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("Bir sayı girin: ");
int sayi = sc.nextInt();
System.out.println("Girdiğiniz sayı: " + sayi);
} catch (Exception e) {
System.out.println("Lütfen geçerli bir sayı girin!");
} finally {
sc.close();
System.out.println("Program sonlandı.");
}
}
}

🧠 12. En Sık Kullanılan Exception Türleri

Section titled “🧠 12. En Sık Kullanılan Exception Türleri”
ExceptionAçıklama
ArithmeticExceptionMatematiksel hata (örn: 10/0)
NullPointerExceptionBoş referans kullanımı
ArrayIndexOutOfBoundsExceptionDizi sınır aşımı
FileNotFoundExceptionDosya bulunamadı
IOExceptionGiriş/çıkış hatası
NumberFormatExceptionYanlış sayı formatı

KavramAçıklamaAnahtar Kelime
try-catchHataları yakalamak içintry { ... } catch (e) { ... }
finallyHer durumda çalışan blokfinally { ... }
throwHata fırlatmathrow new Exception()
throwsHata bildirmevoid metot() throws IOException
Custom ExceptionKendi hata sınıfını yazmakclass MyException extends Exception

💡 Not: Hata yönetimi, sağlam (robust) uygulamalar yazmak için vazgeçilmezdir.