课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发是目前大多数软件开发程序员都需要熟练掌握的一个编程语言,而本文我们就通过案例分析来简单了解一下,Java编程异常概念解析分享。
Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。
其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,这两种异常有很大的区别,也称之为非检查异常(UncheckedException)和检查异常(CheckedException),其中Error类及其子类也是非检查异常。
检查异常和非检查异常
检查异常:也称为“编译时异常”,编译器在编译期间检查的那些异常。由于编译器“检查”这些异常以确保它们得到处理,因此称为“检查异常”。如果抛出检查异常,那么编译器会报错,需要开发人员手动处理该异常,要么捕获,要么重新抛出。除了RuntimeException之外,所有直接继承Exception的异常都是检查异常。
非检查异常:也称为“运行时异常”,编译器不会检查运行时异常,在抛出运行时异常时编译器不会报错,当运行程序的时候才可能抛出该异常。Error及其子类和RuntimeException及其子类都是非检查异常。
说明:检查异常和非检查异常是针对编译器而言的,是编译器来检查该异常是否强制开发人员处理该异常:
检查异常导致异常在方法调用链上显式传递,而且一旦底层接口的检查异常声明发生变化,会导致整个调用链代码更改。
使用非检查异常不会影响方法签名,而且调用方可以自由决定何时何地捕获和处理异常
建议使用非检查异常让代码更加简洁,而且更容易保持接口的稳定性。
athrow指令:在Java程序中显示抛出异常的操作(throw语句)都是由athrow指令来实现的,athrow指令抛出的Objectref必须是类型引用,并且必须作为Throwable类或Throwable子类的实例对象。它从操作数堆栈中弹出,然后通过在当前方法的异常表中搜索与objectref类匹配的一个异常处理程序:
如果在异常表中找到与objectref匹配的异常处理程序,PC寄存器被重置到用于处理此异常的代码的位置,然后会清除当前帧的操作数堆栈,objectref被推回操作数堆栈,执行继续。
如果在当前框架中没有找到匹配的异常处理程序,则弹出该栈帧,该异常会重新抛给上层调用的方法。如果当前帧表示同步方法的调用,那么在调用该方法时输入或重新输入的监视器将退出,就好像执行了监视退出指令(monitorexit)一样。
如果在所有栈帧弹出前仍然没有找到合适的异常处理程序,这个线程将终止。
异常表:异常表中用来记录程序计数器的位置和异常类型。表示的意思是:如果在8到16(不包括16)之间的指令抛出的异常匹配MyCheckedException类型的异常,那么程序跳转到16的位置继续执行。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。