🎉
Java finally 句の例外処理
Java の finally 句で例外が発生すると、元々の例外を上書きしてしまう。
サンプルプログラム
class HelloWorld {
public static void main(String[] args) {
try {
try {
throw new Exception("Exception in try clause");
}
finally {
throw new Exception("Exception in finally clause");
}
}
catch (Exception ex) {
System.out.println(ex.toString());
}
}
}
出力結果
java.lang.Exception: Exception in finally clause
finally で後始末的な処理(たとえばDB接続のクローズ)をする場合、それらの処理のエラーは無視した方がよいことがある。このようなフローはテストもしづらいので、きちんと理解して適切にコーディングしたい。
上記の結果は、catch 句が存在した場合も同様。
class HelloWorld {
public static void main(String[] args) {
try {
try {
throw new Exception("Exception in try clause");
}
catch(Exception ex) {
throw new Exception("Exception in catch clause");
}
finally {
throw new Exception("Exception in finally clause");
}
}
catch (Exception ex) {
System.out.println(ex.toString());
}
}
}
出力結果
java.lang.Exception: Exception in finally clause
Discussion