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 (RuntimeExceptionhariç).- İşlenmeli (
try-catchkullanarak) veya metodun imzasında (throwskullanarak) bildirilmelidir. - Normal koşullarda oluşabilecek hataları temsil ederler (örneğin,
IOException,FileNotFoundException).
Kontrol Edilmeyen İstisnalar:
java.lang.RuntimeExceptionveyajava.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:trybloğunda belirtilen türde istisna oluşursa çalışan kod bloğu. Farklı türler için birden fazlacatcholabilir.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)NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException- vb.
- Diğer
Exceptionalt sınıfları (Kontrol Edilen İstisnalar)IOExceptionFileNotFoundExceptionSQLException- 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.