try catch return finally

結(jié)論:

1、不管有沒有出現(xiàn)異常,finally塊中代碼都會執(zhí)行;
2、當(dāng)try和catch中有return時(shí),finally仍然會執(zhí)行;
3、finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒有返回運(yùn)算后的值,而是先把要返回的值保存起來,不管finally中的代碼怎么樣,返回的值都不會改變,任然是之前保存的值),所以函數(shù)返回值是在finally執(zhí)行前確定的;
4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。
參考:https://www.cnblogs.com/fery/p/4709841.html

 public static void main(String[] args) {

        System.out.println(new testlist().test());;
        System.out.println(x);;
    }
    static int test()
    {
        x = 1;
        try
        {
            x++;
            x = x/0;     ---報(bào)錯(cuò)
            return x;
        } catch (Exception e) {
            return x++;
        }
        finally
        {
            x++;
        }
    }

輸出結(jié)果:
2
4

去掉報(bào)錯(cuò)部分輸出結(jié)果是2,3
出現(xiàn)非Exception的錯(cuò)誤,如果finally有return返回值,則返回該值,沒有則報(bào)錯(cuò)

public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>(1);
        int i = change("1","2",list);
        System.out.println(i);
        System.out.println(list);
    }

    private static int change(String s1, String s2, List<Integer> list) {
        try {
            list.add(1);
            int i = 1/0;   ---報(bào)錯(cuò)部分
            return 1;
        } catch (Exception e){
            list.add(2);
            return 2;
        } finally {
            list.add(3);
            return 3;
        }
    }
輸出結(jié)果:
3
[1, 2, 3]
去掉報(bào)錯(cuò)部分輸出結(jié)果是
3
[1, 3]
try {
  // do something
  System.exit(1);
} finally{
  System.out.println(“Print from finally”);
}

不會執(zhí)行finally中的語句

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容