Çoklu yakalama nasıl çalışır - 1

"Birkaç ilginç ders daha. Ah, öğretmeyi ne kadar seviyorum!"

"Size birden çok catch bloğunun nasıl çalıştığından bahsetmek istiyorum . Çok basit: bir try bloğunda istisnalar oluştuğunda , yürütme ilk catch bloğuna geçer."

"catch bloğunun parantezleri içinde belirtilen bir tür, atılan istisnanın türüyle eşleşiyorsa, yürütme o blok içinde başlar. Aksi takdirde, aynı kontrolün yapıldığı bir sonraki catch bloğuna geçilir ."

" Catch bloklarımız biterse ve istisna yakalanmadıysa, yeniden atılacak ve mevcut yöntem anormal bir şekilde sona erecek."

"Anlıyorum. İstisna türüyle çakışan catch bloğu, yürütülen blok olacaktır."

"Evet, doğru. Ancak gerçekte biraz daha karmaşık. Sınıflar diğer sınıfları miras alabilir. Bir Cow sınıfı bir Animal sınıfını miras alırsa, Cow nesnesine yalnızca bir Cow değişkeni tarafından değil, aynı zamanda bir Animal değişkeni tarafından da başvurulabilir. "

"Ve?"

"Tüm istisnalar, İstisna'yı veya RuntimeException'ı ( bu da İstisna'yı da devralır) devraldığından, yine de 'catch ( İstisna e)' veya ' catch (RuntimeException e) ' kullanılarak yakalanabilirler ."

"Ve?"

"İki sonuca varabiliriz. Birincisi, herhangi bir istisnayı yakalamak için 'catch (İstisna e)' kullanabilirsiniz. İkincisi, catch bloklarının sırası önemlidir. "

"İşte bazı örnekler:"

" ArithmeticException0'a böldükten sonra oluşan, ikinci catch bloğunda yakalanacak."

kod
try
{
    System.out.println("Before calling method1.");
    int a = 1 / 0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}

"Aşağıdaki örnekte, ArithmeticExceptionilk catch bloğunda yakalanacaktır, çünkü tüm istisnalar İstisna'yı devralır, yani Exceptiontüm istisnaları kapsar. "

kod
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Divided by zero. Exception has been caught.");
}

"Aşağıdaki örnekte ArithmeticExceptionyakalanmayacak. Çağıran yönteme yeniden atılacak."

kod
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}

"Bu, işleri biraz netleştirdi. Bu istisnalar, en kolay konu değil."

"Sadece öyle görünüyor. Aslında Java'daki en basit şeylerden biri."

"Buna sevinsem mi üzülsem mi bilemiyorum..."