异常的种类和jvm是如何捕获异常的
异常:
异常的种类,throwable下面分Exception,Error.
Exception:程序(开发人员写的程序)可捕获并能处理的异常;
Error:程序不可捕获。比如说,类定义错误,jvm虚拟机错误。
异常开销大:当发现异常时,虚拟机会访问当前线程的所有栈帧,并记录所在的类名,方法,行号等信息。
jvm是如何捕获异常的:
方法体里面的代码被编译成字节码文件之后,会有个属性表,属性表记录了各种字节码指令,以及一个异常属性。
异常属性记录了从哪里到哪里的代码,发了异常,要跳到哪里去处理。from to taget 异常类型。
finally的代码块,会被复制三分,try区域,catch区域以及没有被catch区域捕获到的异常。
finnally如果后面还有代码,会有一个goto字节指令,跳转到相应的地方执行。
java7的suppressed异常,以及语法糖。
try..finally的异常是为了解决使用资源忘了关闭的问题。
如果catch内抛出了异常会被finally捕获,捕获的是最新的异常,原因的异常会丢失。因此
1.suppereed允许开发人员将一个异常附于另一个异常之上。
2.try-with-resources可精简资源关闭,资源类实现AutoCloseable接口。
3.支持捕获多种异常,异常之间用|分隔开。

浙公网安备 33010602011771号