答案:會執行,在return 前執行
/*
-
java面試題20--如果catch裏面有return語句,finally裏面的代碼還會執行嗎?
*/
public class FinallyDemo2 {
public static void main(String[] args) {
System.out.println(getInt());
}public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*- return a 在程序執行到這一步的時候,這裏不是return a 而是 return 30;這個返回路徑就形成了
- 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40
- 再次回到以前的路徑,繼續走return 30,形成返回路徑之後,這裏的a就不是a變量了,而是常量30
*/
} finally {
a = 40;
}
// return a;
}
}
執行結果:30
package com.java_02;
/*
-
java面試題20--如果catch裏面有return語句,finally裏面的代碼還會執行嗎?
*/
public class FinallyDemo2 {
public static void main(String[] args) {
System.out.println(getInt());
}public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*- return a 在程序執行到這一步的時候,這裏不是return a 而是 return 30;這個返回路徑就形成了
- 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40
- 再次回到以前的路徑,繼續走return 30,形成返回路徑之後,這裏的a就不是a變量了,而是常量30
*/
} finally {
a = 40;
return a; //如果這樣,就又重新形成了一條返回路徑,由於只能通過1個return返回,所以這裏直接返回40
}
// return a;
}
}
執行結果:40