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に遭遇したらどうしますか.
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        ,            。
*/