CodeGym /Курсове /Синтаксис на Java /Как работи мулти-уловът

Как работи мулти-уловът

Синтаксис на Java
Ниво, Урок
На разположение
Как работи 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 да се натъжа за това…“

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION