• Effective Java学习笔记---------异常


    只针对异常的情况才使用异常

    1. 基于异常的模式(try-catch)比标准模式要慢的多
    2. 设计良好的API不应该强迫它的客户端为了正常的控制流而使用异常

    对可恢复的情况使用受检异常,对编程错误使用运行时异常

    1. 三种可抛出结构:受检异常、运行时异常、错误
    2. 运行时异常和错误都不需要也不应该被捕获,这两种属于不可恢复的情形,继续执行下去有害无益
    3. 运行时异常表明编程错误
    4. 可恢复情况,抛出受检异常;程序出错抛出运行时异常;不确定是否可恢复,抛出未受检异常

    避免不必要地使用受检异常

    1. 在谨慎使用的前提下,受检异常可以提高程序的可读性

    优先使用标准的异常

    1. 不要直接重用Exception、RuntimeException、Throwable或者Error,因为他们可能是一个方法抛出的其他异常的超类

    2. 最常见的可重用异常

      IllegalArgumentException 非null的参数值不正确
      IllegalStateException 不适合方法调用的对象状态
      NullPointerException 在禁止使用null的情况下参数值为null
      IndexOutOfBoundsException 下标参数值越界
      ConcurrentModificationException 在禁止并发修改的情况下,检测到对象的并发修改
      UnsupportedOperationException 对象不支持用户请求的方法

    抛出与抽象对应的异常

    1. 更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常(异常转译)(捕获一个异常,然后可以自己选择一个合适的异常抛出)

      1. // Exception Translation
      2. try {
      3. ... // Use lower-level abstraction to do our bidding
      4. } catch (LowerLevelException e) {
      5. throw new HigherLevelException(...);
      6. }

    每个方法抛出的所有异常都要建立文档

    1. 始终要单独地声明受检异常,利用javadoc的@throw标签,准确地记录下抛出每个异常的条件

    在细节消息中包含失败---捕获信息

    努力使失败保持原子性

    不要忽略异常

    1. 空的catch块会使异常达不到应有的目的
    2. 如果选择忽视异常,catch块中应该包含一条注释,说明为什么可以这么做,并且变量应该命名为ignored
    1. try{
    2. }catch(Exception ignored){
    3. }

  • 相关阅读:
    软件评测师之存储器分类
    家庭宽带qos服务级别及服务器跑家宽
    SiP封装技术将制霸“后摩尔时代”?利尔达首款SiP模组应运而生!
    问题处理: Keil5没有AT89C51芯片
    【VSCode】解决Open in browser无效
    初学Nodejs(3):http模块
    locust的使用
    第三章 内存管理 九、基本分段存储管理方式
    荐书丨《好奇心的秘密》:一个针尖上可以站多少跳舞的小天使?
    三层交换、VLAN总结
  • 原文地址:https://blog.csdn.net/jsq916/article/details/126705507