Java中程序出现了异常,整个程序会停止吗,程序是啥反应?
一直都思考不明白的问题。
学JVM的时候记下来的一句话
意思就是出现异常没补捕获方法就会结束? 弹出的栈帧是出现异常的那个栈帧还是全部栈帧?
测试代码:
结果:
可见,m1和m2的sout都没有执行。
难道逻辑是这样:m2中出现的异常没有解决,会抛出去,然后把m2栈帧弹出去!然后执行m1,m1也没有捕获这个异常,就继续抛出去,然后弹出m1栈帧,对main方法也是如此。
验证一下,加入在m1中捕获异常:
结果:
我擦,还真是这样!m2出现了异常,自己没解决,抛出异常,栈帧弹出,所以m2中的sout执行不了了。异常来到了m1,被m1捕获了,就能继续向下执行了。
结论:
方法出现异常,如果没捕获,就弹出栈帧并且沿着方法调用栈往外抛出异常,谁没有捕获,谁就得弹出!擦!