理论教育 Java语言和虚拟机的异常处理机制

Java语言和虚拟机的异常处理机制

时间:2023-06-19 理论教育 版权反馈
【摘要】:Java语言在设计上与C++有许多相同之处,它的异常处理机制基本上沿袭了C++的规则。Java的异常处理语句及抛出异常语句与相应的C++的语句完全一样,它的异常处理是静态绑定的,没被处理的异常是沿着方法调用栈向上传播,异常处理完毕后程序的执行点转移到异常处理句柄的下一条语句。Java与C++不同的是Java具有完善的异常类定义,Java的异常类可分为三大类:Error、一般异常及RuntimeException。

Java语言和虚拟机的异常处理机制

Java语言在设计上与C++有许多相同之处,它的异常处理机制基本上沿袭了C++的规则。Java的异常处理语句及抛出异常语句与相应的C++的语句完全一样,它的异常处理是静态绑定的,没被处理的异常是沿着方法调用栈向上传播,异常处理完毕后程序的执行点转移到异常处理句柄的下一条语句。

Java与C++不同的是Java具有完善的异常类定义,Java的异常类可分为三大类:Error、一般异常及RuntimeException。当类动态连接失败或产生其他硬件错误时,虚拟机产生Error异常,一般的Java程序不会产生该异常,也不必对该类异常进行处理;RuntimeException类的异常是虚拟机在运行时产生的,如算术运算异常、数组索引异常、引用异常等。由于该类异常在程序中普遍存在,因此用户没必要对它们进行检测、处理,编译程序在编译时也不会去检查该类异常,这些异常由虚拟机在运行时检测并对其进行处理;通常用户程序需要产生并提供异常处理句柄的异常为一般异常,一般异常与Error不同,它不是严重的系统异常,也不是在程序中普遍存在的,因此在编译时编译器就会提示用户提供异常处理句柄,否则编译不会通过,例如I/O异常。

编译程序为含有异常处理语句的方法生成一异常处理表,该表指明了异常处理语句产生异常的字节码范围、异常处理句柄的地址以及产生的异常类型.(www.daowen.com)

虚拟机是Java语言异常处理机制的微观实现,当虚拟机产生异常或程序执行时由字节码指令athrow产生异常时,异常处理程序都会根据所产生的异常类型及产生异常的当前程序点,在方法异常表中查找对应的异常处理句柄。方法异常表给出了某一程序段代码所产生的异常类型及其对应的异常处理句柄,若查到对应的异常处理句柄则执行该句柄,执行完毕后返回异常处理句柄的下一条语句,若没找到,则异常沿方法调用栈向上传播,将产生的异常传播给该方法的调用者。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈