0x40000015装系统出现c报错 程序异常退出是什么原因( 九 )


既然我说了,那么就是一定有的啦 。
public class TryCatchFinallyDemo3 {public static void main(String[] args) {try{System.out.println(10 / 0);}catch(Exception e) {e.printStackTrace();System.exit(0);}finally {System.out.println("finally我有执行到吗");}}} 执行结果:
java.lang.ArithmeticException: / by zeroat com.it.test3.TryCatchFinallyDemo3.main(TryCatchFinallyDemo3.java:6) 可以发现:

当只有在try或者catch中调用退出JVM的相关方法,此时finally才不会执行,否则finally永远会执行 。
3.5.4 小结
    try块:用于捕获异常 。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块 。catch块:用于处理try捕获到的异常 。finally块:无论是否捕获或处理异常,finally块里的语句都会被执行 。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行 。在以下4种特殊情况下,finally块不会被执行:在finally语句块中发生了异常 。在前面的代码中用了System.exit()退出程序 。程序所在的线程死亡 。关闭CPU 。
3.6 如何选择异常类型 可以根据下图来选择是捕获异常,声明异常还是抛出异常
我们在日常处理异常的代码中,应该遵循的原则:
不要捕获类似Exception 之类的异常,而应该捕获类似特定的异常,方便排查问题,而且也能够让其他人接手你的代码时,会减少骂你的次数 。不要生吞异常 。这是异常处理中要特别注重的事情 。如果我们不把异常抛出来,或者也没有输出到日志中,程序可能会在后面以不可控的方式结束 。有时候需要线上调试代码 。4 JDK1.7有关异常新特性 4.1 try-with-resources
Java 类库中有许多资源需要通过 close 方法进行关闭 。比如 InputStream、OutputStream等 。作为开发人员经常会忽略掉资源的关闭方法,导致内存泄漏 。当然不是我啦!
在JDK1.7之前呢,try-catch-finally语句是确保资源会被关闭的最佳方法,就算异常或者返回也一样可以关闭资源 。
让我们先看看之前我们如何关闭资源吧:public static String readFile(String path) {
BufferedReader br = null; try { br = new BufferedReader(new FileReader(path)); return br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally {//必须在这里关闭资源 if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }}是不是我们必须finally语句块中手动关闭资源,否则会导致资源的泄露
在JDK1.7及以后的版本:
JDK1.7 中引入了try-with-resources 语句 。
try-with-resources 语句是一个声明一个或多个资源的try语句 。try-with-resources 语句确保在语句的最后每个资源都被关闭,只要是实现了AutoCloseable接口或者是Closeable接口的对象都可以使用try-with-resources 来实现异常处理和关闭资源 。实际上,在编译时也会进行转化为try-catch-finally语句 。那我们来看看怎么使用吧:

推荐阅读