java finally块后的语句是否要执行

finally快中语句肯定执行,finally块后的语句视情况而定:若是catch中截获异常或者有异常抛出,则不执行,这也不完全,例如下边的例子:
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后面的语句!

喵喵时光机
浏览 650回答 1
1回答

长风秋雁

其实你如果理解了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后面的语句!"); } } main方法向test方法中传递了a=0 由于除数为0,则抛出算数异常 由于题主代码中捕获了异常,则进入到catch块中,则打印第一行结果 执行完catch块后则进入到finally中则执行finally语句,则打印底二行结果 由于异常被catch块捕获了之后,则表示程序还是可以正常的执行的,则执行line2的代码,打印第句话 main函数向test方法中传递a=1 由于除数不为0,则正常执行。输出后面的结果。 总结:finally后面的语句这个分几种情况 异常被捕获:finally代码正常执行并且finally后面正常的代码还是可以继续执行 异常未被捕获:finally代码正常执行,并将异常向上一层调用方抛出,但是finally后面正常的代码不再执行
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java