1. 程式人生 > >catch中有return語句,finally中的語句會執行嗎?

catch中有return語句,finally中的語句會執行嗎?

public class Test1 {
	public static void main(String[] args) {
		Demo d =new Demo();
		System.out.println(d.method());
	}
}

class Demo{
	public int method() {
		int x=10;
		try {
			x=20;
			System.out.println(1/0);  //出現異常
			return x;
		}catch(Exception e) {
			x=30;
			return x;
		} finally {
			x=40;
			System.out.println("執行了嗎");
			// return x;          
		}
	}
}

 上述程式碼執行的結果是:

執行了嗎
30

從結果可以看出,finally中程式碼被執行了,但是為什麼返回30,而不是返回40?

當程式執行到try中輸出語句,會產生異常,被catch捕捉到,x=30執行,在執行return時,return 先建立好一個返回路徑,把x=30打包好,然後執行finally中的程式碼,x=40被執行了,但是return的返回路徑已確定,所以不會返回40,finally中的程式碼主要是釋放資源,執行x=40這種程式碼沒有意義,在執行玩finally程式碼後,最後按照return的返回路徑返回。

如果在finally中寫上return,會覆蓋掉之前在catch中的返回路徑,直接返回40,但是這樣寫前邊try和catch就沒有任何意義了,程式最終就會返回finally中return,所以這種寫法是錯誤的。