Hatalar ve İstisnalar

Java'da Veri Türleri ve İstisnalar

Jim White

Java Developer

İstisnalar vs Hatalar

  • Error ciddi bir sorun ya da arızadır
  • Uygulamalar hataları işleyip toparlanamaz
    • Hatalar uygulamanın "çökmesine" ya da durmasına yol açar
    • Örnek: bellek yetersizliği Java'da bir hatadır
  • Uygulamalar istisnaları işleyip toparlanabilir
    • Dizi boyutu dışındaki bir elemana erişmeye çalışmak bir istisnadır.
Java'da Veri Türleri ve İstisnalar
Hata Örneği
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Java'da Veri Türleri ve İstisnalar

İki tür istisna

Checked İstisna Çalışma Zamanı ("unchecked") İstisna
İşleme zorunluluğu Evet Hayır
Genel neden Kontrolümüz dışındaki durumlar Programlama hatalarımız
Kurtarma Öngörüldüyse genelde toparlanır Genelde toparlanamaz
Kurtarma yöntemi try/catch veya throws En iyisi dikkatli kodlayıp kaçınmak
Örnek istisna Dosya bulunamadı Dizi indeks taşması
Java'da Veri Türleri ve İstisnalar

Checked ve Runtime istisnalar

  • Exception alt sınıfı olup RuntimeException alt sınıfı olmayanlar checked istisnalardır
    • Ele alınmalıdır (işlenmelidir)
    • Örn: dosya bulunamadı (FileNotFoundException)
  • RuntimeException, tüm unchecked istisnaların üst sınıfıdır
    • İşlenmeleri gerekmez
    • Örn: olmayan bir dizi indeksine erişmek (IndexOutOfBoundsException)
    • Örn: sıfıra bölmeye çalışmak (ArithmeticException)
Java'da Veri Türleri ve İstisnalar

RuntimeException

RuntimeException Alt Sınıfı Ne zaman atılır açıklaması
ArithmeticException 0'a bölme gibi hatalı aritmetik
IndexOutOfBoundsException Dizi, String vb. için aralık dışı indeks
NegativeArraySizeException Negatif boyutlu dizi oluşturmaya çalışma
int y = 5/0; // ArithmeticException tetikleyen kod
int[] list = new int[-1];  //NegativeArraySizeException tetikleyen kod
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 Bkz. https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Java'da Veri Türleri ve İstisnalar

"Checked" İstisna

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 Bkz. https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Java'da Veri Türleri ve İstisnalar

Hadi pratik yapalım!

Java'da Veri Türleri ve İstisnalar

Preparing Video For Download...