27

Java では、try-catch-finally の try ブロック内に return ステートメントを挿入すると、finally ブロックは実行されませんか?

4

8 に答える 8

26

finallyブロックが実行されないのは、到達exit()する前に呼び出したときだけです。呼び出しによって JVM がシャットダウンされるため、後続のコード行は実行されませんfinallyexit()

編集:これは完全に正しくありません。詳細については、以下のコメントを参照してください。

于 2011-08-22T06:28:26.973 に答える
9

finally ブロックは、戻っても、try ブロック内で例外がスローされても、常に実行されます。

Java 言語仕様のセクション14.19.2 try-catch-finallyの実行も参照してください。

于 2011-08-22T06:22:14.740 に答える
3

finally ブロックは、これらすべてのケースで実行されます。最後に finally ブロックを実行するポイントは、取得したすべてのリソースを解放できるようにすることです。

以下は、それがどのように機能するかを示す例です。

public class Hello {

    public static void hello(){
        try{
            System.out.println("hi");
            return;
            }catch(RuntimeException e){
        }finally{
            System.out.println("finally");

        }

    }

    public static void main(String[] args){
        hello();
    }
}
于 2011-08-22T06:27:22.247 に答える
2

try ブロック内で戻っても実行されます。try 内に 1 つの return ステートメントを配置し、finally 内にも 1 つの return ステートメントを配置しました。返された値は、try からではなく、finally からのものでした。

public class HelloWorld{
   public static void main(String args[]){
      System.out.println(printSomething());
   }

   public static String printSomething(){
      try{
          return "tried";
      } finally{
          return "finally";
      }
   }
}

私が得た出力は「最終的に」でした。

于 2014-04-11T06:51:40.767 に答える
0

公式の説明によると:

注: try または catch コードの実行中に JVM が終了すると、finally ブロックが実行されない場合があります。同様に、try または catch コードを実行しているスレッドが中断または強制終了された場合、アプリケーション全体が続行されても、finally ブロックが実行されない可能性があります。

ここに回答を投稿する前に、公式ウェブサイトを参照することをお勧めします。

于 2014-05-18T22:59:09.487 に答える
0

メソッドがキャッチされない例外または明示的な return ステートメントを介して呼び出し元に戻ろうとするときはいつでも、メソッドが戻る直前に finally 句も実行されます。

于 2014-07-09T18:59:33.110 に答える