當前位置:
首頁 > 知識 > 基於JAVA學習-異常總結

基於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中的位置。

心得:

若不能親手測試總結,結論總是別人的。

以上。

轉發分享是一種美德

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

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

TAG:java學習吧 |