/*
- 面試題:
- 1:final,finally和finalize的區(qū)別
- final:最終的意思,可以修飾類陪白,成員變量颈走,成員方法
修飾類,類不能被繼承
修飾變量咱士,變量是常量
修飾方法立由,方法不能被重寫
- finally:是異常處理的一部分,用于釋放資源序厉。
一般來說锐膜,代碼肯定會執(zhí)行,特殊情況:在執(zhí)行到finally之前jvm退出了
- finalize:是Object類的一個方法弛房,用于垃圾回收
- 2:如果catch里面有return語句道盏,請問finally里面的代碼還會執(zhí)行嗎?
- 如果會,請問是在return前,還是return后捞奕。
面試回答: 會牺堰。前。
準確的說颅围,應該是在中間伟葫。
- 3:try...catch...finally的格式變形
A:try...catch...finally
B:try...catch
C:try...catch...catch...
D:try...catch...catch...finally
E:try...finally
這種做法的目前是為了釋放資源。
*/
public class FinallyDemo2 {
public static void main(String[] args) {
System.out.println(getInt()); //返回30
}
public static int getInt(){
int a=10;
try {
System.out.println(a/0); //分母除0拋出異常
a=20; //不會執(zhí)行
}catch (ArithmeticException e){
a=30;
//System.exit(0);
return a;// 形成返回路徑return 30院促,而不是return a
/*
* return a在程序執(zhí)行到這一步的時候筏养,這里不是return a而是return 30;這個返回路徑就形成了。
* 但是呢常拓,它發(fā)現(xiàn)后面還有finally渐溶,所以繼續(xù)執(zhí)行finally的內(nèi)容,a=40 再次回到以前的返回路徑弄抬,繼續(xù)走return
* 30;
*/
} finally {
a = 40;
System.out.println("a=" + a);// 會輸出40,單此時的a已經(jīng)不會和上面發(fā)生關系了
// return a;// 如果這樣結(jié)果就是40了茎辐。
}
//其實在下面的兩句代碼在執(zhí)行的時候不會執(zhí)行,如果不寫會報錯掂恕,因為不一定會執(zhí)行catch拖陆,就沒有了return 語句
System.out.println("a=" + a);
return a;// 返回的是30
}
}