在异常处理中,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不执行。