1.throw
オペレーター
例外がブロックによってキャッチされてから、それが Java マシンにスローされるまでは、それは単なる継承(またはむしろ)catch
オブジェクトです。例外オブジェクト自体には魔法のプロパティはありません。Exception
Throwable
例外がどのように機能するかのロジックはすべて、例外がスローされたときに Java マシンが動作する特別な方法にすぎません。
キャッチした例外はいつでも Java マシンに再スローできます。これを行うには、throw
次の演算子を使用する必要があります。
throw exception;
例:
コード | コンソール出力 |
---|---|
|
|
このコードでは、例外をキャッチし、それに関するメッセージを画面に表示し、それを再スローしました。
catch
再スローされた例外は、同じブロック内の他のブロックではキャッチできませんtry
。
2. あなたの例外
ちなみに、例外オブジェクトを自分で作成することもできます。例外オブジェクトは、型が であるオブジェクトException
、またはそれを継承するクラスにすぎません。そして投げます。
思ったよりも簡単です。例:
コード | コンソール出力 |
---|---|
|
|
上の例では、型が である新しい例外オブジェクトを作成しRuntimeException
、演算子を使用してすぐにそれをスローしましたthrow
。
catch
RuntimeException は を継承するため、ブロックによってすぐに捕捉されますException
。このcatch (Exception except)
コードは、クラスを継承するすべてのクラスの例外オブジェクトをキャッチしますException
。
3.finally
キーワード
もう一つ重要な点があります。プログラマは、コード内で例外が発生したかどうかに関係なく、何らかのアクションを実行する必要がある場合があります。たとえば、書き込み用にファイルを開いたとします。開いたファイルは、を呼び出して閉じる必要がありますclose()
。
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
これらの必須アクションを実行するために、別の種類のブロック ( finally
) が構成に追加されtry-catch
、それによってtry-catch-finally
構成が作成されました。次のようになります。
例:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
finally
ブロック内のコードは、 例外が発生したかどうかに関係なく、どのような場合でも実行されます。例外がスローされてキャッチされなかった場合でも、finally
ブロックは実行されます。
ちなみに、例外をキャッチしたくないがブロックが必要な場合は、構成finally
の短縮表記であるブロックを使用します。次のようになります。try-catch-finally
try-finally
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION