基於JAVA學習-異常總結
課程中使用到的代碼:
//外部類
public class HelloWorld {
public static void main(String[] args) { HelloWorld b=new HelloWorld(); int a= b.test(); System.out.println(a); //s b.test2(); // this.printI; }
// @SuppressWarnings("finally")
public int test(){
int d=0,r=100;
try};
}
}catch(Exception e){
e.printStackTrace();
// return {};
}
finally{
// return {};
}
return {};
}
}
情況1:try{} catch(){}finally{} return;
有無報錯都按順序執行。返回的都是return的值;
情況2:try{} catch(){}finally{ return }
情況3:try{ return; }catch(){} finally
有異常情況時:
1) 如果第一次循環就沒有報錯了時候,程序執行try塊中return之前(包括return語句中的表達式運算)代碼,此時退出是因為塊中有return;再執行finally塊,因為finally塊中有return所以提前退出。返回的是finally下的return值
2) 如果第一次循環就已經報錯了的時候,程序執行try塊中return之前(包括return語句中的表達式運算)代碼,此時退出是因為異常,執行catch塊;再執行finally塊,返回的是finally下的return值
無異常情況時:
Try, finally,返回的是finally下的return值
情況4:try{ return; }catch(){} finally{} return;
無異常情況:
程序執行try塊中return之前(包括return語句中的表達式運算)代碼;
再執行finally塊,finally塊之後的語句return,因為程序在try中已經return所以不再執行。返回的是try中的return;
有異常情況:
1) 如果第一次循環就已經報錯了的時候,代碼沒有執行到try中的return,就會執行catch塊,再finally,返回最後一個的return;
2) 如果第一次循環就沒有報錯了時候,程序執行try塊中return之前的代碼,再執行finally,返回的是try中的return;
情況5:try{ return;}catch() finally
程序執行try塊中return之前(包括return語句中的表達式運算)代碼;
有異常:
1) 如果第一次循環就沒有報錯了時候,執行catch塊中return之前(包括return語句中的表達式運算)代碼;則再執行finally塊,因為finally塊中有return所以提前退出。返回的是finally下的return值
2) 如果第一次循環就已經報錯了的時候,執行catch塊中return之前(包括 return語句中的表達式運算)代碼;則再執行finally塊,因為finally塊中有return所以提前退出。返回的是finally下的return值
無異常:則再執行finally塊,因為finally塊中有return所以提前退出。返回的是finally下的return值
情況6:try{ return;} catch() finally{} return;
程序先執行try
有異常:
1) 如果第一次循環就沒有報錯了時候,則再執行finally塊,因為finally塊中有return所以提前退出。返回的是try中的return;
2) 如果第一次循環就已經報錯了的時候,執行catch塊中return之前(包括 return語句中的表達式運算)代碼;則再執行finally塊,最後返回的是catch下的return值
無異常:執行完try再finally再return. 返回的是try中的return;
情況7:try{} catch()finally
程序先執行try
有異常情況時:
無論是否循環的第一次執行,都先執行catch塊中return之前(包括return語句中的表達式運算)代碼;
再執行finally塊,返回的是finally下的return值
無異常情況時:
執行finally塊,因為finally塊中有return所以提前退出。返回的是finally下的return值
情況8:try{ } catch() finally{} return;
程序先執行try
有異常:
無論是否循環的第一次執行,都先執行catch中return之前(包括return語句中的表達式運算)代碼,再執行finally語句中全部代碼,最後執行catch塊中return. finally之後也就是4處的代碼不再執行。返回的是catch中的return
無異常:
執行完try再finally再return. 返回最後一個的return;
總結:
try和finally,一定會被執行,但 catch和last不一定會執行,finally下的有return的值,則返回的是finally下的有return的值;
其他情況都是第一次遇見return遇見誰就執行誰的return
按照執行順序就是try ,catch,finally,last
return只能是塊中的最後位置
finally塊中的return和最後的return是不能並存的
try和catch中的return不能單獨使用,try也不能和catch一起使用,必須搭配finally或者last一起使用
結論:
遵循前三條總結,可以準確把握異常返回值的結果
遵循後三條總結,可以窮盡return中的位置。
心得:
若不能親手測試總結,結論總是別人的。
以上。
轉發分享是一種美德


※JS Ajax批量刪除數據信息
※程序員成長離不開哪些能力的培養?
※Web前端開發工程師需要掌握哪些核心技能?
※如何實現一個分散式 RPC 框架
※華為的JAVA面試題及答案 部分
TAG:java學習吧 |