• java基础——异常,如何选择异常处理方式


    1.所有的异常都是从Throwable继承而来的,是所有异常的共同祖先。

    2.Throwable有两个子类,Error和Exception

      Error:错误,对于所有的编译时期的错误以及系统错误都是通过Error抛出的。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。

      Exception:是另外一个非常重要的异常子类。它规定的异常是程序本身可以处理的异常。异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。

      

      Checked Exception:可检查的异常,这是编码时非常常用的,所有checked exception都是需要在代码中处理的。它们的发生是可以预测的,正常的一种情况,可以合理的处理。比如IOException,或者一些自定义的异常。除了RuntimeException及其子类以外,都是checked exception。
      这类异常通常是在编码时可以预料到的,可能发生的异常

      Unchecked Exception:RuntimeException及其子类都是unchecked exception。比如NPE空指针异常,除数为0的算数异常ArithmeticException等等,这种异常是运行时发生,无法预先捕捉处理的。Error也是unchecked exception,也是无法预先处理的。

      这类异常在编码中无法预料,即使无法预料到,在运行时jvm也会进行检查,同时抛出异常,抛出的异常和自己编码时抛出的异常效果类似

     

    /**
     * 
     *     异常处理两种方式的比较:
     *     1.throws 写在方法声明中,指明此方法执行时,可能会抛出的异常类型
     *         一旦方法执行出现异常时,仍会在异常代码处生成一个异常类的对象,满足throws后异常类型时,
     *         就会被抛出,后面的代码就不再执行
     *     2.try-catch-finally:真正将异常处理了
     *     
     *     3.如何选择:
     *         3.1:如果父类中被重写的方法没有throws方法处理异常,则子类也不能使用throws
     *             即子类重写的方法中必须也要try-catch-finally进行处理
     *         3.2:子类重写方法throws的异常不得大于父类方法throws的异常类型
     *         这两条的原因:由于多态,子类如果throws了超过父类范围的异常,那么在调用处,就接不住这个异常
     *         
     *         3.3:执行的方法a中连续调用了三个具有递进关系的方法b,c,d,那么这三个方法中使用throws抛出异常
     *             然后方法a中用一个try-catch-finally将这个三个方法包裹起来
     *         原因:b如果运行时出现异常,必须通知a让其不继续往下进行后面的方法c,d
     *             如果在b内就catch了异常,a就无法得知而继续执行c,d,这样显然是不行的
     * */
  • 相关阅读:
    Update语句到底是如何操作记录的?
    sp_helptext输出错行问题解决
    SSMS查询快捷方式设置
    快速定义临时表或表变量
    T-SQL逻辑查询
    基于交换的排序算法
    插入排序及其扩展
    Python之django基础第一天,认识django
    flask虚拟环境的安装和注意事项
    Linux基础
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12148225.html
Copyright © 2020-2023  润新知