Hata Yakalama

Hata Yakalama

Exception runtime da yani uygulama çalışırken meydana gelen hatalardır. Bu hataların bir kısmı tolere edilebilirken bir kısmı ise uygulamanın tamamen durmasına neden olur. Developer olarak bizim amacımız bu hataları yakalamak ve mümkünse tolere edip uygulamanın çalışmaya devam etmesini sağlamaktır, tabi hatanın meydana gelmesini önlemek çok daha öncelikli hedefimiz.

Java bizlere kullanılması kolay ve esnek bir hata yakalama mekanizması sunuyor. 

 

Javada tüm hatalar sınıflar tarafından temsil edilir, yani bir hata oluştuğunda bir hata objesi oluşturulur. Java dilinde tüm hataların atası Throwable sınıfıdır. Throwable sınıfının iki tane doğrudan alt sınıfı bulunur, Exception ve Error. Error sınıfı doğrudan bizim kodumuzla ilgili olmayan JVM ile ilgili hatalar için kullanılır ve bu hatalar kontrolümüz dışındadır.

 

Javada hata yakalama beş anahtar kelime ile yönetilir; try, catch, throw, throws ve finally. Hata açısından izlemek istediğimiz kodları try bloğuna yazmalıyız. try bloğu içerisinde bir hata oluşursa bu hata fırlatılır. Fırlatılan hatayı catch bloğu yakalar. Sistem tarafından oluşturulan hatalar otomatik olarak fırlatılır fakat bazı durumlarda bizim de manuel olarak hata fırlatmamız gerekir, bu durumda throw ifadesi kullanılır. Bazı durumlarda yazdığımız metodun hangi hataları fırlatabileceğini metod imzasında belirtmemiz gerekir. Bu durumda throws ifadesi kullanılır. Bir try bloğundan sonra hata olsun olmasın mutlaka yapılması gereken bir iş varsa o da finally bloğunda yapılır.

Try ve catch bloğunun genel yapısı aşağıdaki gibidir. try tek başına kullanılabilir ama catch ifadesi sadece try ile birlikte kullanılabilir.

import javax.swing.JOptionPane;

public class TryCatchIfadesi {
    public static void main(String[] args) {
        double sayi1 = Integer.parseInt(JOptionPane.showInputDialog(null, "1. Sayı:"));
        double sayi2 = Integer.parseInt(JOptionPane.showInputDialog(null, "2. Sayı:"));
        double sonuc;
        try {
            sonuc = sayi1 / sayi2;
            JOptionPane.showMessageDialog(null, sayi1 + "/" + sayi2 + "=" + sonuc);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Hata!" + e);
        }

    }
}

 

finally ifadesi

Bazı durumlarda try-catch ifadesini terk etmeden hemen önce çalıştırmamız gereken kodlar olabilir. Bu durumlar genelde try bloğu içinde bir dosya açtıysak onu kapatmak için yada bir network bağlantısı kurduysak o bağlantıyı kapatmak için kullanılan kodlardır. Bu tarz durumlar programlamada oldukça yaygındır ve java bize bu durumu yönetmek için finally ifadesini sunuyor. Genel yapısı şu şekildedir;

try {
    // code to be monitored for error
} catch(ExceptionType1 ex) {
    // handling ExceptionType1
} catch(ExceptionType2 ex) {
    // handling ExceptionType2
} finally {
    // finally code to clean up all we created in try
}