本文向大家描述一下当JVM异常发生时Java虚拟机采取的几种措施JVM异常情况在Java中被称作Error(错误)或Exception(JVM异常)是Throwable类的子类 JVM异常捕捉的几种情况 JVM异常情况在Java中被称作Error(错误)或Exception(JVM异常)是Throwable类的子类在程序中的原因运行时错如对一个空指针的引用程序使用了throw语句 当JVM异常发生时Java虚拟机采取如下措施 检查与当前方法相联系的catch子句表每个catch子句包含其有效指令范围能够处理的JVM异常类型以及处理JVM异常的代码块地址 与JVM异常相匹配的catch子句应该符合下面的条件造成JVM异常的指令在其指令范围之内发生的JVM异常类型是其能处理的JVM异常类型的子类型如果找到了匹配的catch子句那么系统转移到指定的JVM异常处理块处执行;如果没有找到JVM异常处理块重复寻找匹配的catch子句的过程直到当前方法的所有嵌套的catch子句都被检查过 由于虚拟机从第一个匹配的catch子句处继续执行所以catch子句表中的顺序是很重要的因为Java代码是结构化的因此总可以把某个方法的所有的JVM异常处理器都按序排列到一个表中对任意可能的程序计数器的值都可以用线性的顺序找到合适的JVM异常处理块以处理在该程序计数器值下发生的JVM异常情况 如果找不到匹配的catch子句那么当前方法得到一个未截获JVM异常的结果并返回到当前方法的调用者好像JVM异常刚刚在其调用者中发生一样如果在调用者中仍然没有找到相应的JVM异常处理块那么这种错误将被传播下去如果错误被传播到最顶层那么系统将调用一个缺省的JVM异常处理块 |