jvm如何处理异常

异常分类

抛出异常

显示

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代码块所有正常执行路径以及异常执行路径的出口中

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 烙个饼,切小后娃说要挤点番茄酱,于是他挤一块消灭一块,于是我们就命名它“WiFi信号饼”
    煮饭家瑶瑶阅读 1,423评论 0 0
  • 开篇:相信一切是因自己而变!让结果证明自己是多么优秀!让自己见证真理是多么奇妙,顺其道而行自己收获的美好人生。 ...
    13e130feb6fd阅读 1,228评论 0 0
  • 碧水映层楼, 蓝天舞鹭鸥。 春风送天籁, 人在画中游。 2018.2.10.
    艾汕敬明阅读 681评论 0 0