
「さらに興味深いレッスンがいくつかあります。ああ、私は教えることが大好きです。」
「複数の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 ブロックの順序が重要です。」
"ここではいくつかの例を示します:"
「ArithmeticException
0 で割った後に発生する は、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 つです。」
「喜ぶべきか悲しむべきか分からない…」
GO TO FULL VERSION