たまに忘れる
あれ、どうだったっけなってたまに忘れるのでメモ
public static void main(String[] args) { try { String moji = null; try { moji.getBytes(); System.out.println("いつ実行されるのその0?"); } catch(Exception e) --- ① { } finally --- ② { System.out.println("finally"); } System.out.println("いつ実行されるのその1?"); } catch(Exception e) --- ③ { } finally --- ④ { System.out.println("いつ実行されるのその2?"); } }
実行結果は以下の通り
- finally
- いつ実行されるのその1?
- いつ実行されるのその2?
動きはこんな感じ
- moji.getByte()でヌルポが発生
- ①のcatch節でエラーをキャッチ(※キャッチするだけ)
- ②のfinallyで"finally"が表示
- try節を抜けるので、そのまま処理が続行され"いつ実行されるのその1?"が表示される
- 外側にfinallyが定義されているので"いつ実行されるのその2?"が表示される。
以下の場合。
public static void main(String[] args) { try { String moji = null; try { moji.getBytes(); System.out.println("いつ実行されるのその0?"); } catch(Exception e) --- ① { throw e; } finally --- ② { System.out.println("finally"); } System.out.println("いつ実行されるのその1?"); } catch(Exception e) --- ③ { } finally --- ④ { System.out.println("いつ実行されるのその2?"); } }
実行結果は以下の通り
- finally
- いつ実行されるのその2?
動きはこんな感じ
- moji.getByte()でヌルポが発生
- ①のcatch節でエラーをキャッチ&スロー
- ②のfinallyで"finally"が表示
- エラーがスローされたので、外側にcatch節がないか探しに行く
- ③のcatch節でエラーをキャッチ
- ④で"いつ実行されるのその2?"が表示される。