Sobes.tech
Junior

Java'da hatalar nasıl işlenir ve onlarla nasıl çalışılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da hatalar istisna mekanizması kullanılarak işlenir. İstisnalar, programın normal akışını bozan olaylardır. İki tür istisna vardır: Kontrol Edilen İstisnalar (Checked Exceptions) ve Kontrol Edilmeyen İstisnalar (Unchecked Exceptions).

Kontrol Edilen İstisnalar:

  • java.lang.Exception'dan türemiştir (RuntimeException hariç).
  • İşlenmeli (try-catch kullanarak) veya metodun imzasında (throws kullanarak) bildirilmelidir.
  • Normal koşullarda oluşabilecek hataları temsil ederler (örneğin, IOException, FileNotFoundException).

Kontrol Edilmeyen İstisnalar:

  • java.lang.RuntimeException veya java.lang.Error'dan türemiştir.
  • Zorunlu işleme veya bildirim gerekmez.
  • Sıkça kodda mantık hatalarını veya çalışma zamanı ortamındaki beklenmeyen durumları gösterirler (örneğin, NullPointerException, ArrayIndexOutOfBoundsException).

İstisna İşleme:

İstisnaları işlemek için try-catch-finally blokları kullanılır:

  • try: İstisna oluşturabilecek kod bloğu.
  • catch: try bloğunda belirtilen türde istisna oluşursa çalışan kod bloğu. Farklı türler için birden fazla catch olabilir.
  • finally: Her durumda çalışacak kod bloğu. Kaynakları serbest bırakmak için sıkça kullanılır (örneğin, dosya kapatma, bağlantı kapatma).
try {
    // İstisna oluşturabilecek kod
    int result = 10 / 0; // Örnek: ArithmeticException
} catch (ArithmeticException e) {
    // ArithmeticException işleme
    System.err.println("Sıfıra bölme hatası: " + e.getMessage());
    // Hata kaydedilebilir, kullanıcıya mesaj gösterilebilir, vb.
} catch (Exception e) {
    // Diğer tüm istisnaların işlenmesi
    System.err.println("Genel hata: " + e.getMessage());
} finally {
    // Her zaman çalışacak kod
    System.out.println("Finally bloğu çalıştı.");
}

İstisnaların iletilmesi:

Bir metod, belirli bir istisna oluşturabileceğini throws anahtar kelimesiyle bildirebilir:

public void readFile(String filePath) throws FileNotFoundException, IOException {
    // Dosya okuma kodu
    // Dosya bulunamazsa, `FileNotFoundException` (`IOException`'dan türemiş) atılabilir
    FileReader fr = new FileReader(filePath);
    // Giriş/çıkış hatası oluşursa, `IOException` atılabilir
    // ...
}

Çağıran metod, ya bu istisnayı yakalamalı (try-catch) ya da da throws ile bildirmelidir.

Kendi istisnalarınızı oluşturma:

Exception veya RuntimeException'dan türeyen kendi istisna sınıflarınızı oluşturabilirsiniz:

public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

Kullanım:

public void processData(int value) throws MyCustomException {
    if (value < 0) {
        throw new MyCustomException("Değer negatif olamaz");
    }
    // Veri işleme
}

Temel istisna sınıfları (hiyerarşi):

  • java.lang.Throwable (tüm hata ve istisnaların temel sınıfı)
    • java.lang.Error (genellikle program tarafından işlenmeyen ciddi sorunlar, örn. OutOfMemoryError)
    • java.lang.Exception (programın işleyebileceği istisnalar)
      • java.lang.RuntimeException (Kontrol Edilmeyen İstisnalar)
        • NullPointerException
        • ArrayIndexOutOfBoundsException
        • ArithmeticException
        • vb.
      • Diğer Exception alt sınıfları (Kontrol Edilen İstisnalar)
        • IOException
        • FileNotFoundException
        • SQLException
        • vb.

Hata ile çalışma, bu hiyerarşiyi anlamayı, uygun istisna türünü seçmeyi (kendi oluştururken), try-catch-finally'yi etkin kullanmayı ve hataları kaydetmeyi içerir, böylece hata ayıklama yapılabilir.