私は(ほとんどの部分で)試行、キャッチ、および最終的に動作する方法を知っていますが、私が疑問に思っていたことが1つあります。try-catch-finallyの後にreturnステートメントで何が起こるか、try(またはcatch )?
例えば:
public boolean someMethod(){
boolean finished = false;
try{
// do something
return true;
}
catch(someException e){
// do something
}
finally{
// do something
}
return finished;
}
試行で何も問題がなかったとしましょう。そのため、trueを返しました。次に、最後に接続を閉じるようなことをしますか?
メソッドは、finallyで何らかの処理を行った後(つまり、メソッドがtryでtrueを返した後)に停止しますか、それとも、finallyの後で続行し、結果としてfinished(false)を返しますか?
回答いただきありがとうございます。
Finallyブロックが実行されても、プログラムに戻ったことを忘れさせることはありません。すべてがうまくいくと、finallyブロックの後のコードは実行されません。
これを明確にする例を次に示します。
public class Main {
public static void main(String[] args) {
System.out.println("Normal: " + testNormal());
System.out.println("Exception: " + testException());
}
public static int testNormal() {
try {
// no exception
return 0;
} catch (Exception e) {
System.out.println("[normal] Exception caught");
} finally {
System.out.println("[normal] Finally");
}
System.out.println("[normal] Rest of code");
return -1;
}
public static int testException() {
try {
throw new Exception();
} catch (Exception e) {
System.out.println("[except] Exception caught");
} finally {
System.out.println("[except] Finally");
}
System.out.println("[except] Rest of code");
return -1;
}
}
出力:
[normal] Finally
Normal: 0
[except] Exception caught
[except] Finally
[except] Rest of code
Exception: -1
すべてが順調に進んだ場合、try
ブロックの実行後にfinally
が実行され、内部でreturnが実行されます。
try
の内部で問題が発生した場合、exception
がキャッチされて実行され、次にfinally
ブロックが実行されてから、その後のリターンが実行されます。
その場合、finally内のコードは実行されますが、例外がない場合、他のリターンはスキップされます。何かをログに記録することで、これを自分で確認することもできます。
System.exit
についても参照してください。 JavaのSystem.exit()はtry/catch/finallyブロックでどのように機能しますか?
そして、finallyからの戻りを参照してください。 Javaのfinallyブロックからの戻り
public int Demo1()
{
try{
System.out.println("TRY");
throw new Exception();
}catch(Exception e){
System.out.println("CATCH");
}finally{
System.out.println("FINALLY");
}return 0;
}
このメソッドの呼び出しの出力は次のようになります
TRY
CATCH
FINALLY
0
考慮事項Try{}catch{}finally{}
この特定のケースでは、1つずつ実行される一連のステートメントとして。そして、制御は戻るために行きます。
間違いなく、try内のコードは実行されますが、returnステートメントに到達すると、tryブロックでreturnステートメントを実行せずに、finallyブロックに移動します。次に、finallyのコードが実行され、次にreturnステートメントが実行されます。 tryが実行されます。