Try ve Catch

Java'da Veri Türleri ve İstisnalar

Jim White

Java Developer

Java'da sorunlar

  • Uygulamalarda sorunlar ortaya çıkabilir
    • Yanlış girdi
    • Kodlama hataları
    • Öngörülemeyen durumlar
  • Bu sorunlara istisna denir (exceptions)
    • Normal kontrol akışını keser
  • Java istisna fırlatır (throws)
Java'da Veri Türleri ve İstisnalar

İstisna Örneği

public static void main(String[] args) {
    ArrayList<String> allStars = new ArrayList<String>();
    allStars.add("Mays");
    allStars.add("Aaron");
    allStars.add("Ruth");
    String last = allStars.get(3); // This will cause an exception
    System.out.println(last);
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of 
bounds for length 3
Java'da Veri Türleri ve İstisnalar

Try

  • İstisna üreten kodu bir try bloğuna alın
    • "Bu kodu dene; sorun olursa catch bloğuna aktar"
try {
    // İstisnalar için izlenecek deyimler
}
Java'da Veri Türleri ve İstisnalar

Catch

  • Try'ın ardından bir catch bloğu yerleştirin
    • İstisnaları ele alan bir işleyicidir
    • Yakalanan istisna bu bloğa parametre olarak geçer
  • Bazı istisna türleri için try/catch zorunludur
    • Diğerleri için isteğe bağlıdır
try {
    // İstisnalar için izlenecek deyimler
} catch (<Exception type> <variable name>) {
    // İstisna oluşursa çalışacak deyimler
}
Java'da Veri Türleri ve İstisnalar

IndexOutOfBoundsException yakalama

try {
  ArrayList<String> allStars = new ArrayList<String>();
  allStars.add("Mays");
  allStars.add("Aaron");
  allStars.add("Ruth");
  String last = allStars.get(3); // Accessing an element that isn't there
  System.out.println(last);
} catch (IndexOutOfBoundsException e) {
  System.out.println("Hata - yanlış indeks");
}
Hata - yanlış indeks
Java'da Veri Türleri ve İstisnalar

Birden Çok Catch

  • Farklı istisna türleri için birden çok catch bloğu kullanın
  • Her catch kendi istisna türü ve değişkenine sahiptir
  • İstisna oluştuğunda Java, eşleşme bulana kadar catch bloklarını sırayla dener
try {
    ArrayList<String> nums 
      = new ArrayList<String>();
    nums.add("one");
    String last = nums.get(0);
    Integer.valueOf(last);
    System.out.println(last);
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Hata - yanlış indeks");
} catch (NumberFormatException eValueOf) {
    System.out.println(
      "Hata - String sayı değil");
}
Hata - String sayı değil
Java'da Veri Türleri ve İstisnalar

Genel "Catch"

  • Genel yakalama için catch (Exception variable){ } kullanın
    • Diğer catch bloklarının yakalamadığı istisnaları işler
try {
    // Denenecek kod
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Hata - yanlış indeks");
} catch (NumberFormatException eValueOf) {
    System.out.println("Hata - String sayı değil");
} catch (Exception e) { // Yukarıdakiler dışındaki tüm istisnalar
    System.out.println("Beklenmeyen bir durum oldu");
}
Java'da Veri Türleri ve İstisnalar

Finally

  • finally bloğundaki kod her zaman çalışır
// İstisna oluştuğunda
try {
    Integer.valueOf("one");
} catch (NumberFormatException eValueOf) {
    System.out.println("Hata");
} finally {
    System.out.println("Temizlik yapılıyor");
}
Hata
Temizlik yapılıyor

 

// İstisna fırlatılmadığında
try {
    Integer.valueOf("1");
} catch (NumberFormatException eValueOf) {
    System.out.println("Hata");
} finally {
    System.out.println("Temizlik yapılıyor");
}
Temizlik yapılıyor
Java'da Veri Türleri ve İstisnalar

Exception nesnesi

  • Catch bloğuna geçen Exception nesnesi zengin bilgi içerir
  • Neyin yanlış gittiğini anlamak için yöntemlerini kullanın
    • İnsan tarafından okunur neden için .getMessage()
    • Sınıf/tür adı için .getClass()
    • Yığın izlemesini göstermek için .printStackTrace() (sonraki slayt)
public class ExceptionExample {

    public static void main(String[] args) {
        try {
            Integer.valueOf("one");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
Java'da Veri Türleri ve İstisnalar

Exception stack trace

  • Stack trace, hataya giden yürütme akışının kaydını verir
    • Aşağıda: önceki kodun çıktısı — yazdırılan stack trace dahil
For input string: "one"
java.lang.NumberFormatException: For input string: "one"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:661)
    at java.base/java.lang.Integer.valueOf(Integer.java:988)
    at foo/exceptions.ExceptionExample.main(ExceptionExample.java:7)
Java'da Veri Türleri ve İstisnalar

Ayo berlatih!

Java'da Veri Türleri ve İstisnalar

Preparing Video For Download...