首頁  >  文章  >  Java  >  java中finally語句的實例詳解

java中finally語句的實例詳解

零下一度
零下一度原創
2017-07-20 19:02:501674瀏覽

 至少有兩種情況下finally語句是不會被執行的:
(1)try語句沒有被執行到,如在try語句之前return就回傳了,這樣finally語句就不會執行。這也說明了finally語句被執行的必要而非充分條件是:對應的try語句一定被執行到。

(2)在try區塊|catch區塊中有System.exit(0);這樣的語句。 System.exit(0)是終止Java虛擬機器JVM的,連JVM都停止了,所有都結束了,當然finally語句也不會被執行到。

在try-catch-finally中, 當return遇到finally,return對finally無效,即:

     1.在try catch區塊裡return的時候,finally也會被執行。

     2.finally裡的return語句會把try catch區塊裡的return語句效果覆蓋掉。

結論:return語句不一定都是函數的出口,執行return時,只是把return後面的值複製了一份到回傳值變數裡去了。


class Exc{
	int a;
	int b;
}


public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
		e.a = 10;
		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;
			
		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);
		
		return res+3;
	}
	
	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}

  輸出:

try ……
finnaly occured
mian b= 2

結論: 如果沒有例外, 則執行try 中的程式碼區塊,直到try 中的return ,接著執行finally 中的程式碼區塊,finally 執行完後, 回到try 中執行return 。退出函數。

class Exc{
	int a;
	int b;
}


public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
//		e.a = 10;
//		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;
			
		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);
		
		return res+3;
	}
	
	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}

  輸出:

ArithmeticException occured
finnaly occured
0
mian b= 3

#結論: 如果try 中有異常, 則在異常語句處,跳到catch 捕獲的異常代碼區塊,執行完catch 後,再執行finally ,跳出try{}catch{}finally{} ,繼續往下執行,不會去執行try中後面的語句。

以上是java中finally語句的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn