Finally文ブロックの実行
2419 ワード
一、finally文ブロックは必ず実行しますか?
Javaにおける異常キャプチャメカニズムtry...catch...finallyブロックのfinally文は必ず実行されますか?多くの人はそうではないと言っています.もちろん、彼らの答えは正しいです.実験を経て、少なくとも以下の2つの場合finally文は実行されません.
(1)異常捕捉メカニズムfinallyブロックはtryとcatchブロックに関連付けられており、関連している以上try...catch...finally文が実行されていない論理的に達しない場合、try文の前に戻った場合、finally文は実行されない.これはfinally文が実行される必要があることを示している.十分な条件ではなく、対応するtry...catch...finally文が必ず実行される着きます.
(2)tryブロックにSystem.exit(0)がある.このような文、System.exit(0);Java仮想マシンJVMを終了したもので、JVMさえ停止しているので、すべて終了しました.もちろんfinally文も実行されません.
二、finally文ブロックは必ず実行されますか.returnに遭遇したらどうしますか.
三、finally文ブロックはreturn文の影響を受けず、どのfinally文ブロックがreturnの前に実行されるのか、それとも後に実行されるのか.
四、戻る前にfinallyブロックで文を実行します.どのfinallyブロックでもreturnはどうなりますか.
Javaにおける異常キャプチャメカニズムtry...catch...finallyブロックのfinally文は必ず実行されますか?多くの人はそうではないと言っています.もちろん、彼らの答えは正しいです.実験を経て、少なくとも以下の2つの場合finally文は実行されません.
(1)異常捕捉メカニズムfinallyブロックはtryとcatchブロックに関連付けられており、関連している以上try...catch...finally文が実行されていない論理的に達しない場合、try文の前に戻った場合、finally文は実行されない.これはfinally文が実行される必要があることを示している.十分な条件ではなく、対応するtry...catch...finally文が必ず実行される着きます.
(2)tryブロックにSystem.exit(0)がある.このような文、System.exit(0);Java仮想マシンJVMを終了したもので、JVMさえ停止しているので、すべて終了しました.もちろんfinally文も実行されません.
二、finally文ブロックは必ず実行されますか.returnに遭遇したらどうしますか.
public class FinallyTest1 {
public void test(){
try{
System.out.println("Try statement block……");
return ;
}catch(Exception e){
System.out.println("Exception statement block……");
}finally{
System.out.println(" try return , finally , ……");
}
}
public static void main(String[] args) {
FinallyTest1 t=new FinallyTest1();
t.test();
}
}
/*
:
Try statement block……
try return , finally , ……
:
finally try return 。
*/
三、finally文ブロックはreturn文の影響を受けず、どのfinally文ブロックがreturnの前に実行されるのか、それとも後に実行されるのか.
public class FinallyTest2 {
private int test(){
int a=520;
try{
return a+=1314000;
}catch(Exception e){
System.out.println();
}finally{
System.out.println("Finally ,a :"+a);
a=0;
System.out.println(" (a=0), !");
}
return 250;
}
public static void main(String[] args) {
FinallyTest2 t=new FinallyTest2();
System.out.println(" (return) :"+t.test());
}
}
/*
:
Finally ,a :1314520
(a=0), !
(return) :1314520
:
try return , return ,
finally , return 。
*/
四、戻る前にfinallyブロックで文を実行します.どのfinallyブロックでもreturnはどうなりますか.
public class FinallyTest3 {
//@SuppressWarnings ( , ) 。
@SuppressWarnings("finally")
private int test(){
try{
return 520;
}catch(Exception e){
System.out.println();
}finally{
return 5820; // return
}
}
public static void main(String[] args) {
FinallyTest3 t=new FinallyTest3();
System.out.println(" (return) :"+t.test());
}
}
/*
:
(return) :5820
:
try finally return , return , 。
*/