Javaの例外処理 try~catch

try ~ catch の効果

・例外を、ユーザが用意した処理ルーチンで処理できる
・例外のチェックと処理をコードのあちこちに埋め込まないで済む
・既定の例外処理メカニズムのスタックメッセージは表示されない

tryブロックの実行

例外が発生した時点で、tryブロック内の実行は中止され、catchの検索を開始する

catchブロックの検索

1.tryブロックの直後にある1つ目のcatchから開始する
2.該当catchブロックが無ければ、ほかのtryブロックのcatchブロックを検索する
3.それでも該当catchブロックが無ければ、呼び出しメソッドが検索される
4.main()メソッドまでさかのぼっても該当catchブロックが無ければ、既定の例外メッセージが表示され、プログラムは停止する

catchブロックの順序

サブクラスより先にスーパークラスを捕獲するような順序でcatchブロックが並んでいると、コンパイルエラーになる

finallyブロックの実行

・tryブロック、catchブロックの実行が終わった時点で(catchが例外を捕獲したかしないかにかかわらず)、必ずfinallyブロックが実行される
・tryブロック内にreturnステートメントがあっても、呼び出し元に戻る前に必ずfinallyブロックが実行される
・catchブロック内にthrowステートメントがあっても、呼び出し元に戻る前に必ずfinallyブロックが実行される

throwステートメントの効果

同じcatchブロックの実行は中止され、例外処理は継続し、次のcatchの検索が開始される

例外2種

・チェック例外 :キャッチしなければコンパイルエラーになる例外
・非チェック例外:キャッチしなくてもコンパイルエラーにならない例外