マルチキャッチの仕組み - 1

「さらに興味深いレッスンがいくつかあります。ああ、私は教えることが大好きです。」

「複数のcatchブロックがどのように機能するかについて説明したいと思います。それは非常に簡単です。try ブロックで例外が発生すると実行は最初のcatchブロックに移動します。」

「catch ブロックの括弧内に示された型が、スローされた例外の型と一致する場合、そのブロック内で実行が開始されます。そうでない場合は、次のcatchブロックに移動し、そこで同じチェックが実行されます。」

「キャッチブロックが不足し、例外がキャッチされなかった場合、例外は再スローされ、現在のメソッドは異常終了します。」

「なるほど。例外の種類と一致したcatchブロックが実行されるんですね。」

「はい、そうです。しかし、実際にはもう少し複雑です。クラスは他のクラスを継承できます。Cow クラスが Animal クラスを継承する場合、Cow オブジェクトは Cow 変数だけでなく、Animal 変数からも参照される可能性があります。 」

"と?"

すべての例外はExceptionまたはRuntimeException (これもExceptionを継承します) を継承するため、「catch ( Exception e)」または「catch (RuntimeException e) 」を使用してキャッチできます。

"と?"

「結論は 2 つあります。1つ目は、'catch (Exception e)' を使用して例外をキャッチできます。2 つ目は、catch ブロックの順序が重要です。

"ここではいくつかの例を示します:"

ArithmeticException0 で割った後に発生する は、2 番目の 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.");
}

"以下の例では、すべての例外が Exception を継承する、つまりすべての例外をカバーするArithmeticExceptionため、 は最初の 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は捕捉されません。呼び出し元のメソッドに再スローされます。」

コード
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 で最も単純なものの 1 つです。」

「喜ぶべきか悲しむべきか分からない…」