İstisna türleri

"Bugün bir konudan daha bahsetmek istiyorum. Java'da tüm istisnalar iki türe ayrılır: işaretli ve işaretsiz (yakalanması gerekenler ve sizin yakalamanız gerekmeyenler). Varsayılan olarak, tüm istisnaların olması gerekir. yakalanmış."

"Kodunuza kasıtlı olarak istisnalar atabilir misiniz?"

"Kendi kodunuz içinde herhangi bir istisna atabilirsiniz. Kendi istisnalarınızı bile yazabilirsiniz. Ama bunun hakkında daha sonra konuşacağız. Şimdilik, Java Makinesi tarafından atılan istisnalara odaklanalım."

"TAMAM."

" Bir yöntemde ClassNotFoundException veya FileNotFoundException atılırsa (olursa), geliştiricinin bunları yöntem bildiriminde belirtmesi gerekir. Bunlar kontrol edilen istisnalardır. Genellikle şu şekilde görünür:"

Kontrol edilen istisna örnekleri
public static void method1() throws ClassNotFoundException, FileNotFoundException
public static void main() throws IOException
public static void main() // Doesn't throw any exceptions

"Öyleyse 'atışları' ve ardından virgülle ayrılmış istisnalar listesi yazıyoruz, değil mi?"

"Evet. Ama dahası da var. Programın derlenmesi için , method1aşağıdaki örnekte çağıran yöntemin iki şeyden birini yapması gerekir: ya bu istisnaları yakalayın ya da yeniden atılan istisnaları bildirgesinde belirterek onları (arayana) yeniden atın . "

"Yine. Ana yönteminizin, bildirimi ' throws FileNotFoundException , …' içeren bir yöntemi çağırması gerekiyorsa , o zaman iki şeyden birini yapmanız gerekir:

1) FileNotFoundException'ı yakalayın , …

Güvenli olmayan yöntemi çağıran kodu bir try-catch bloğuna sarmanız gerekir.

2) FileNotFoundException'ı yakalamayın , …

Bu istisnaları ana yönteminizin fırlatma listesine eklemelisiniz ."

"Bana bir örnek verebilir misin?"

"Şuna bir bak:"

Kontrol edilen istisna örnekleri
public static void main(String[] args)
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"Bu örnekteki kod derlenmeyecek çünkü ana yöntem , yakalanması gereken istisnalar atan method1()' i çağırıyor."

"Derlenmesini sağlamak için ana yönteme istisna işleme eklememiz gerekiyor. Bunu iki yoldan biriyle yapabilirsiniz:"

Seçenek 1: İstisnayı (arayan kişiye) basitçe yeniden atarız:
public static void main(String[] args)  throws FileNotFoundException, ClassNotFoundException
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"Ve burada bir try-catch ile yakalıyoruz :"

2. Seçenek: İstisnayı yakalayın:
public static void main(String[] args)
{
    try
    {
        method1();
    }
    catch(Exception e)
    {
    }
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"Daha netleşmeye başlıyor."

"Aşağıdaki örneğe bakın. Gerisini anlamanıza yardımcı olacaktır."

İstisnaları ele almak yerine, onları nasıl ele alacağını bilen çağrı yığınının altındaki yöntemlere atarız:
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
    method1();
}
Bir istisnayı işleyin ve bir başkasını atın:
public static void method3() throws ClassNotFoundException
{
   try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
}
Her iki istisnayı da yakala, hiçbirini atma:
public static void method4()
{
    try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
    catch (ClassNotFoundException e)
    {
        System.out.println("ClassNotFoundException has been caught.");
    }
}

"Bir istisna türü daha var, RuntimeException ve onu miras alan sınıflar. Onları yakalamanıza gerek yok. Bunlar denetlenmeyen istisnalardır. Tahmin edilmesi zor kabul edilirler. Onlarla aynı şekilde başa çıkabilirsiniz, ancak bunları bir throws yan tümcesinde belirtmeniz gerekmez ."