关于java的try catch finally 中finally是否一定执行?

在异常处理中,finally一般都会执行,但有时可以使其不执行,我们可以看个程序:

try {
            
            throw new NullPointerException();
        }catch (Exception e){
            
            e.printStackTrace();//打印错误信息,标准输出流
            
            System.exit(10);//退出虚拟机
        }finally {

            System.out.println("你好!");
        }

输出结果:

D:\jdk1.8\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA 2018.3.5\lib\idea_rt.jar=63990:E:\idea\IntelliJ IDEA 2018.3.5\bin" -Dfile.encoding=UTF-8 -classpath D:\jdk1.8\jre\lib\charsets.jar;D:\jdk1.8\jre\lib\deploy.jar;D:\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\jdk1.8\jre\lib\ext\cldrdata.jar;D:\jdk1.8\jre\lib\ext\dnsns.jar;D:\jdk1.8\jre\lib\ext\jaccess.jar;D:\jdk1.8\jre\lib\ext\jfxrt.jar;D:\jdk1.8\jre\lib\ext\localedata.jar;D:\jdk1.8\jre\lib\ext\nashorn.jar;D:\jdk1.8\jre\lib\ext\sunec.jar;D:\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\jdk1.8\jre\lib\ext\zipfs.jar;D:\jdk1.8\jre\lib\javaws.jar;D:\jdk1.8\jre\lib\jce.jar;D:\jdk1.8\jre\lib\jfr.jar;D:\jdk1.8\jre\lib\jfxswt.jar;D:\jdk1.8\jre\lib\jsse.jar;D:\jdk1.8\jre\lib\management-agent.jar;D:\jdk1.8\jre\lib\plugin.jar;D:\jdk1.8\jre\lib\resources.jar;D:\jdk1.8\jre\lib\rt.jar;D:\idea\lh2\out\production\lh2 com.baidu.Demo5.ExcetionTest1
java.lang.NullPointerException
	at com.baidu.Demo5.ExcetionTest1.main(ExcetionTest1.java:9)

可以看出并没有执行finally中的语句,这主要是因为在catch中有System.exit(10),它可以是虚拟机直接停止运行,从而使的finally不执行。

你可能感兴趣的:(关于java的try catch finally 中finally是否一定执行?)