异常分类
抛出异常
显示
throw手动抛出y异常
隐示
java虚拟机碰到无法继续执行的异常状态,自动抛出异常
捕获异常
try 标记进行异常监控代码
catch 针对该异常的处理结果
finally 声明一段必定执行的代码
异常基本概念
Throwable
Exception 检查异常
RuntimeException 非检查异常
Error 非检查异常
检查异常
检查异常的构造十分昂贵。在构造检查异常时,java虚拟机便要生成该异常的栈轨迹。该操作会逐一访问当前线程的java栈帧,并且记录下各种调试信息,包括栈帧所指向方法的名字,方法所在的类名,文件名,以及代码中的第几行触发该异常
java虚拟机如何捕获异常
在编译成的字节码中,每一个方法都附带一个异常表,异常表中的每一个条目代表一个异常处理器,并且由from、to、target指针以及所捕获的异常类型构成
当程序触发异常时,java虚拟机会从上之下遍历异常表中的所有条目。当触发异常的字节码的索引值在某个异常条目的监控范围内,java虚拟机会判断所抛出的异常和该条目想要捕获的异常是否匹配。如果匹配,java虚拟机会将控制流转移至该条目target指针指向的字节码
如果遍历完所有的条目,java虚拟机仍然未匹配到异常处理器,那么它会弹出当前方法对应的java栈帧,并且调用者中重复上述操作。在最坏的情况下,java虚拟机需要遍历当前栈程java栈上的所有方法的异常表
finally是赋值代码块的内容,分别方在太try-catch代码块所有正常执行路径以及异常执行路径的出口中
网友评论