虽然实际开发中不会遇到这样的情况,但是笔试面试时有关异常经常会问到如下情况:
public class ExceptionTest5 { public void method() { try { System.out.println("进入到try块"); //return; //会先执行finally块再返回 //虚拟机退出 //System.exit(0); //不会执行finally块中的语句,直接退出 } catch (Exception e) { System.out.println("异常发生了!"); } finally { System.out.println("进入到finally块"); } System.out.println("后续代码"); } public static void main(String[] args) { ExceptionTest5 test = new ExceptionTest5(); test.method(); } }
在加上return语句前,程序输出:
进入到try块
进入到finally块
后续代码
如果在try块中加入return语句:
程序执行输出:
进入到try块
进入到finally块
说明try块中有return语句时,仍然会首先执行finally块中的语句,然后方法再返回。
如果try块中存在System.exit(0);语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的Java虚拟机,程序会在虚拟机终止前结束执行。