NLD

try-catch-finallyの挙動について

「tryブロックで例外が発生した場合にどのような順序で命令が実行されるか」
この疑問を解決するために書籍等を当たってみたが、明確な回答を得られなかった。
そのため、簡単ではあるがcatchやfinally内をどのように実行するのかを調べてみた。

実行環境は以下の通り。
OS:Windows2000
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)


--- サンプルソース Nilab.java ---
class Nilab
{



public static void main(String args[])
{
  Nilab n = new Nilab();

  try
  {
    n.jikken();
    System.out.println("This is a mainTRY.");
  }

  catch ( Exception e )
  {
    System.out.println("This is a mainCATCH.");
  }

}



void jikken() throws Exception
{
  try
  {
    System.out.println("This is a jikkenTRY.");
    throw new Exception();
  }

  catch ( Exception e )
  {
    System.out.println("This is a jikkenCATCH.");
    throw e;
  }

  finally
  {
    System.out.println("This is a jikkenFINALLY.");
  }

}



}


--- 実行結果 Nilab ---
This is a jikkenTRY.
This is a jikkenCATCH.
This is a jikkenFINALLY.
This is a mainCATCH.


このように、catch内でthrowをした場合にも、finally内を律儀にも実行してくれるようだ。この場合、catch内throwの直前にfinally内を実行する。
つまり、finally内には必ず実行させたい終了処理などを書いておけば便利だろうと思われる。



2000.12.03 文章を追加。
2000.11.20 produceD bY NI-Lab.


NLD