當(dāng)try、catch中有return時(shí),finally中的代碼會(huì)執(zhí)行嗎

當(dāng)try、catch中有return時(shí),finally中的代碼會(huì)執(zhí)行嗎


class Solution {

    public static void main(String[] args) {
        System.out.println(getNum());
    }
    
    public static int getNum() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
            return a;
        } catch (Exception e) {
            a = 30;
//          e.printStackTrace();
            return a;
        } finally {
            a = 40;
            return a;       //finally代碼中最好不要包含return,程序會(huì)提前退出,也就是說(shuō)返回的值不是try或catch中的值
        }
//      return a;           //不可達(dá)代碼,前面try語(yǔ)句已經(jīng)退出了,這以下都不會(huì)執(zhí)行
    }
    
}  

總結(jié)

  • 不管有沒(méi)有異常,finally中的代碼都會(huì)執(zhí)行

  • 當(dāng)try、catch中有return時(shí),finally中的代碼依然會(huì)繼續(xù)執(zhí)行

  • finally是在return后面的表達(dá)式運(yùn)算之后執(zhí)行的,此時(shí)并沒(méi)有返回運(yùn)算之后的值,而是把值保存起來(lái),不管finally對(duì)該值做任何的改變,返回的值都不會(huì)改變,依然返回保存起來(lái)的值。也就是說(shuō)方法的返回值是在finally運(yùn)算之前就確定了的。 除非finally中有return 如果是這樣,則返回的值不是try catch運(yùn)算的值,會(huì)被finally語(yǔ)句改變,

  • 所以不建議在finally值中寫(xiě)return返回

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

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