final、finally和finalize(二)

finally adv. 最后;终于;决定性地

所以 finally 一般用来在程序的末尾进行释放资源,对异常处理的补充。

只要 try 执行了,finally 块里的语句就一定会执行,并且在 return 之前执行,但是这里有个条件就是虚拟机没有退出。


  

例如:

try {
            System.out.println("start");
            return;
        } finally {
            System.out.println("end");
        }

程序输出:

start

end


  

但是如果把程序改成这样:

try {
            System.out.println("start");
            // return;
            System.exit(0);
        } finally {
            System.out.println("end");
        }

则程序输出start 后直接退出。


  

这时候可能有些和我一样的菜鸟第一次见到这时会有些疑问,不是说finally 里的语句总是会执行么,怎么没执行呢?

答案就是虽然java规定是这样的,无论是否发生异常finally里的语句都会执行,但是就像树木生长要依赖于土地一样,java类的运行也要依赖于java虚拟机的存在,当执行第5行System.exit(0); 时,导致虚拟机直接退出了,相当于树木没有了赖以生存的土壤,或者说程序在执行的时候突然没有电了,那 finally 的本事再大,里边的语句也不会执行啊。


  

另外,有try 不一定就要有 catch ,只有try 和 finally 的情况下也不是报错的,只是抛出异常时没有捕获而已。

原文地址:https://www.cnblogs.com/yuxiaoqi/p/2711137.html