hatora's blog

日常の出来事や仕事のことなど/Java/開発/Web/IT

たまに忘れる

あれ、どうだったっけなってたまに忘れるのでメモ

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?");			
	}
}

実行結果は以下の通り

  1. finally
  2. いつ実行されるのその1?
  3. いつ実行されるのその2?


動きはこんな感じ

  1. moji.getByte()でヌルポが発生
  2. ①のcatch節でエラーをキャッチ(※キャッチするだけ)
  3. ②のfinallyで"finally"が表示
  4. try節を抜けるので、そのまま処理が続行され"いつ実行されるのその1?"が表示される
  5. 外側に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?");			
	}
}

実行結果は以下の通り

  1. finally
  2. いつ実行されるのその2?


動きはこんな感じ

  1. moji.getByte()でヌルポが発生
  2. ①のcatch節でエラーをキャッチ&スロー
  3. ②のfinallyで"finally"が表示
  4. エラーがスローされたので、外側にcatch節がないか探しに行く
  5. ③のcatch節でエラーをキャッチ
  6. ④で"いつ実行されるのその2?"が表示される。