亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java finally塊后的語句是否要執行

java finally塊后的語句是否要執行

喵喵時光機 2019-01-18 22:20:46
finally快中語句肯定執行,finally塊后的語句視情況而定:若是catch中截獲異?;蛘哂挟惓伋觯瑒t不執行,這也不完全,例如下邊的例子:package com.jessice.example; public class test { public static void main(String[] args) { new FinallyTest().test(0); System.out.println("------------------"); new FinallyTest().test(1); } } class FinallyTest { public void test(int a) { try { int i = 0 / a; } catch (Exception ex) { System.err.println("程序異常了!"); } finally { System.out.println("執行finally!"); } System.out.println("執行finally后面的語句!"); } } 結果就是 程序異常了!執行finally! 執行finally后面的語句! 執行finally!執行finally后面的語句!
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

其實你如果理解了try,catch捕獲異常的說法你就知道了,我來給題主分析一下這個代碼的為啥會出現這個結果

1.程序異常了!
2.執行finally!
3.執行finally后面的語句!
4.執行finally!
5.執行finally后面的語句!

請注意,題主的代碼中

class FinallyTest {

    public void test(int a) {
        try {
            int i = 0 / a;
            //1.異常捕獲
        } catch (Exception ex) {
            System.err.println("程序異常了!");
        } finally {
            System.out.println("執行finally!");
        }
        //line2
        System.out.println("執行finally后面的語句!");
    }
}

  1. main方法向test方法中傳遞了a=0
  2. 由于除數為0,則拋出算數異常
  3. 由于題主代碼中捕獲了異常,則進入到catch塊中,則打印第一行結果
  4. 執行完catch塊后則進入到finally中則執行finally語句,則打印底二行結果
  5. 由于異常被catch塊捕獲了之后,則表示程序還是可以正常的執行的,則執行line2的代碼,打印第句話
  6. main函數向test方法中傳遞a=1
  7. 由于除數不為0,則正常執行。輸出后面的結果。
總結:finally后面的語句這個分幾種情況
  1. 異常被捕獲:finally代碼正常執行并且finally后面正常的代碼還是可以繼續執行
  2. 異常未被捕獲:finally代碼正常執行,并將異常向上一層調用方拋出,但是finally后面正常的代碼不再執行
查看完整回答
反對 回復 2019-02-12
  • 1 回答
  • 0 關注
  • 667 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號