在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ java finally塊后的語(yǔ)句是否要執(zhí)行

java finally塊后的語(yǔ)句是否要執(zhí)行

finally快中語(yǔ)句肯定執(zhí)行,finally塊后的語(yǔ)句視情況而定:若是catch中截獲異常或者有異常拋出,則不執(zhí)行,這也不完全,例如下邊的例子:
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("執(zhí)行finally!");
        }
        System.out.println("執(zhí)行finally后面的語(yǔ)句!");
        }

}

結(jié)果就是

程序異常了!
執(zhí)行finally!

執(zhí)行finally后面的語(yǔ)句!

執(zhí)行finally!
執(zhí)行finally后面的語(yǔ)句!

回答
編輯回答
咕嚕嚕

其實(shí)你如果理解了try,catch捕獲異常的說(shuō)法你就知道了,我來(lái)給題主分析一下這個(gè)代碼的為啥會(huì)出現(xiàn)這個(gè)結(jié)果

1.程序異常了!
2.執(zhí)行finally!
3.執(zhí)行finally后面的語(yǔ)句!
4.執(zhí)行finally!
5.執(zhí)行finally后面的語(yǔ)句!

請(qǐng)注意,題主的代碼中

class FinallyTest {

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

  1. main方法向test方法中傳遞了a=0
  2. 由于除數(shù)為0,則拋出算數(shù)異常
  3. 由于題主代碼中捕獲了異常,則進(jìn)入到catch塊中,則打印第一行結(jié)果
  4. 執(zhí)行完catch塊后則進(jìn)入到finally中則執(zhí)行finally語(yǔ)句,則打印底二行結(jié)果
  5. 由于異常被catch塊捕獲了之后,則表示程序還是可以正常的執(zhí)行的,則執(zhí)行line2的代碼,打印第句話(huà)
  6. main函數(shù)向test方法中傳遞a=1
  7. 由于除數(shù)不為0,則正常執(zhí)行。輸出后面的結(jié)果。
總結(jié):finally后面的語(yǔ)句這個(gè)分幾種情況
  1. 異常被捕獲:finally代碼正常執(zhí)行并且finally后面正常的代碼還是可以繼續(xù)執(zhí)行
  2. 異常未被捕獲:finally代碼正常執(zhí)行,并將異常向上一層調(diào)用方拋出,但是finally后面正常的代碼不再執(zhí)行
2017年3月2日 22:51