멀티 캐치 작동 방식 - 1

"재미있는 수업이 몇 개 더 있어요. 오, 가르치는 게 정말 좋아요!"

"여러 catch 블록이 작동하는 방식에 대해 말씀드리고 싶습니다 . 매우 간단합니다. try 블록에서 예외가 발생하면 실행이 첫 번째 catch 블록으로 이동합니다."

"catch 블록의 괄호 안에 표시된 유형이 발생한 예외 유형과 일치하면 해당 블록 내에서 실행이 시작됩니다. 그렇지 않으면 동일한 검사가 수행되는 다음 catch 블록 으로 이동합니다 ."

" catch 블록이 부족 하고 예외가 포착되지 않으면 예외가 다시 발생하고 현재 메서드가 비정상적으로 종료됩니다."

"그렇군요. 예외 유형과 일치하는 catch 블록이 실행될 것입니다."

"네, 맞습니다. 하지만 실제로는 좀 더 복잡합니다. 클래스는 다른 클래스를 상속할 수 있습니다. Cow 클래스가 Animal 클래스를 상속받는 경우 Cow 객체는 Cow 변수뿐만 아니라 Animal 변수에 의해서도 참조될 수 있습니다. "

"그리고?"

"모든 예외는 Exception 또는 RuntimeException ( Exception 도 상속함 )을 상속하기 때문에 여전히 'catch( Exception e)' 또는 ' catch(RuntimeException e) ' 를 사용하여 잡을 수 있습니다 ."

"그리고?"

"우리는 두 가지 결론을 내릴 수 있습니다. 첫째, 'catch(예외 e)'를 사용하여 모든 예외를 잡을 수 있습니다. 둘째, catch 블록의 순서가 중요합니다. "

"여기 몇 가지 예가 있어요:"

" ArithmeticException0으로 나눈 후에 발생하는 는 두 번째 catch 블록에서 잡힙니다."

암호
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 블록에서 catch됩니다. 즉, 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잡히지 않습니다. 호출 메서드로 다시 throw됩니다."

암호
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에서 가장 간단한 것 중 하나입니다."

"기뻐해야 할지 슬퍼해야 할지 모르겠어..."