try catch是編程中總會出現的一組搭檔,在運行時異常中我們可以添加他們進行代碼的客戶端的友好性提示,在檢測性異常是他們是必不可少的一份子,組合機構如下
try{
//業務邏輯的小集合
}catch(Exception e){
//異常的捕獲
}finally{
//無論是否異常,我都在這里,不離不棄
}
那么異常的執行順序如何呢,簡單說明如下
try-catch-finally-return finally -return catch---return function
也就是說當程序出現異常時,如果我在finally中填寫了return,那么最后return的出發點在finally,但是如果我在catch中填寫了return那么程序在執行了finally后回執行catch的return,
如下代碼輸出
publicStringtest(){
inti =1;
intj =0;
try{
i = i+1;
j = i/j;
return"try"+i++;
}catch(Exception e){
i = i+1;
e.printStackTrace();
return"catch"+i++;
}finally{
i = i+1;
}
}
若在finally中添加return則返回值為5,但在catch中添加,返回值為3,為什么會這樣呢,為什么先執行了finally再進行返回,但返回結果不是5呢,
這和返回機制有關,當執行到catch時,將返回值3放到了返回棧中,執行finally結束后返回棧進行返回,並未影響i的值,但如果finally中也有return,則將覆蓋返回棧中的值
作者:非小惰
鏈接:https://www.jianshu.com/p/4b21c0dddbe5
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。