5

finally例外処理のブロックは正確に何を実行しますか?

4

8 に答える 8

8

例外が発生したかどうかに関係なく、常に実行する必要のあるコードを保持します。

たとえば、ファイルを開いた場合は、finallyブロック内でファイルを閉じて、常に閉じられるようにする必要があります。ブロック内で閉じた場合try、以前の例外により、実行がcatchブロックに直接ジャンプし、ファイルの閉じをスキップします。

詳細については、Javaチュートリアルを参照してください。

于 2010-03-24T16:35:31.037 に答える
4

例外がスローされたかどうかに関係なく、finallyブロックは常に実行されます。私が考えることができる典型的な使用例は、ファイルを閉じることです。

FileOutputStream stream = null;
try{
    // do stuff with the stream here
} catch (IOException ex){
    // handle exception
} finally{
    // always close the stream
    if(stream != null){
        stream.close();
    }
}
于 2010-03-24T16:42:50.577 に答える
3

ブロックに入ったかどうかに関係なく実行されますcatch。つまり、オブジェクトの破棄やその他のクリーンアップを行うのに最適な場所です。

于 2010-03-24T16:35:14.267 に答える
2

コードのブロックに複数のreturnステートメントがある場合にオープンリソースをクリーンアップするためによく使用します。すべてのreturnステートメントの前に同じ「closeresource」コードを複製する必要がないため、コードが非常にクリーンになります。tryセクション内でreturnを実行した場合でも、コードがfinallyセクションを呼び出すことが保証されています。また、プログラマーが誤ってコードを簡単に省略してしまう可能性があるため、この場合のコードの安全性にも役立ちます。

于 2010-03-24T16:43:26.980 に答える
0

finally ブロックは主に、データベースからの接続を閉じるcon.closeなどの close ステートメントを実行するために使用されます....try ブロックの後には常に catch ブロックまたは finally (またはその両方) が続きます... try ブロックを実行すると、finally ブロックはシステム エラー、finally ブロックの例外を除い確実に実行されます。

于 2015-04-03T15:07:56.330 に答える
0

finally キーワードは、例外の発生に関係なく、finally ブロックに存在するコードをすべての状況で実行する必要があることを確認するためにのみ使用されます。

例:

 try{
     }
     catch(Exception e){
     }
      finally{
             System.out.print("finally executed");
            }

注: 上記の場合、finally は常に実行されます。

于 2015-08-18T20:17:31.497 に答える
0

tryブロックだけでなくorcatchブロックでも値を返す場合は、ブロックの戻り値が最終的に得られるもの (最後に実行されたfinallyブロック) になることに注意してください。finallyつまり、 をtryスローせExceptionず、値を返すはずのコードが、finallyブロックも値を返すはずの場合、finallyブロックの値が実際に返されることになります。 この SO スレッドはまさにその点について語っています。tryor内で値を返すことcatchは、通常、必要または最良のアイデアだとは思いません。またSystem.exit(0)、JVM を強制終了するため、他の処理が実行される前に実行が停止されるため、finallyブロックが実行されない可能性があることに注意してください。

于 2011-10-20T20:57:52.633 に答える