Как работи multi-catch - 1

„Още няколко интересни урока. О, колко обичам да преподавам!“

„Бих искал да ви разкажа за това How работят множество catch блокове. Много е просто: когато възникнат изключения в try блок, изпълнението се премества към първия catch блок.“

"Ако тип, посочен в скобите на catch блока, съвпада с типа на хвърленото изключение, тогава изпълнението започва вътре в този блок. В противен случай преминаваме към следващия catch блок, където се извършва същата проверка."

„Ако ни свършат catch блоковете и изключението не е уловено, то ще бъде хвърлено отново и текущият метод ще прекрати необичайно.“

„Разбирам. Блокът catch, който съвпада с типа изключение, ще бъде този, който ще бъде изпълнен.“

„Да, така е. В действителност обаче е малко по-сложно. Класовете могат да наследяват други класове. Ако клас Cow наследи клас Animal, обектът Cow може да бъде рефериран не само от променлива Cow, но и от променлива Animal. "

"И?"

„Тъй като всички изключения наследяват Exception or RuntimeException (което също наследява Exception ), те все още могат да бъдат уловени с помощта на „catch ( Exception e)“ or „ catch (RuntimeException e) “.“

"И?"

„Можем да направим две заключения. Първо, можете да използвате „catch (Exception e)“, за да уловите всяко изключение. Второ, редът на catch блоковете има meaning.

"Ето няколко примера:"

„Това ArithmeticException, което се случва, след като разделим на 0, ще бъде уловено във втория блок за улавяне.“

Код
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.");
}

"В примера по-долу, ArithmeticExceptionще бъде уловен в първия catch блок, тъй като всички изключения наследяват Exception, т.е. Exceptionобхваща всички изключения. "

Код
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.");
}

„В примера по-долу ArithmeticExceptionняма да бъде уловен. Ще бъде прехвърлен към извикващия метод.“

Код
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.");
}

„Това малко изясни нещата. Тези изключения не са най-лесната тема.“

"Само изглежда така. Те всъщност са едно от най-простите неща в Java."

„Не знам дали да се радвам or да се натъжа за това…“