制御が到達しないことが保証されているコード行をJavaが見つけた場合、コンパイラは到達不能コードエラーを報告します。
次のコードを検討してください。
static int method1() {
try{ return 1; }
catch(Exception e){ } // LINE-1
finally{ }
System.out.println("abc"); //LINE-2
return 2;
}
}
上記のコード
1では、 try ブロックは 1 を返すことによって終了することが保証されていますが、finally ブロックの後の行 (LINE-2 以降) には到達可能です。
2 . catch ブロック (LINE-1) をコメントすると、LINE-2 に到達できなくなります。
なぜそうなのか。コンパイラは、ケース 1 の try ブロックで無条件のリターンを確認できません。