Exception -- 01 -- Error和Exception的区别

在日常的开发过程中,我们会碰到许多错误异常,可分为两类:一类是 Error,一类是 Exception,这里让我们来了解下它们之间的区别


一、Java 异常体系

Exception -- 01 -- Error和Exception的区别


二、Error 和 Exception 的区别

  • Error

    • 是程序无法处理的系统错误,编译器不做检查
  • Exception

    • 是程序可以处理的异常,捕获后可能恢复

三、RuntimeException 和非 RuntimeException 的区别

  • RuntimeException

    • 不可预知的,程序应当自行避免
  • 非 RuntimeException

    • 可预知的,编译器编译时会自动校验

四、常见的 Error 以及 Exception

  • Error

    异常 含义
    NoClassDefFoundError 找不到类定义的异常
    StackOverflowError 深递归导致栈被耗尽而抛出的异常
    OutOfMemoryError 内存溢出异常
  • RuntimeException

    异常 含义
    NullPointerException 空指针异常
    ClassCastException 类型强制转换异常
    IllegalArgumentException 非法参数异常
    IndexOutOfBoundsException 下标越界异常
    NumberFormatException 数字格式异常
  • 非 RuntimeException

    异常 含义
    ClassNotFoundException 找不到指定类的异常
    IOException IO 操作异常

五、异常处理机制

  • 抛出异常

    • 创建异常对象,交由运行时系统进行处理
  • 捕获异常

    • 寻找何时的异常处理器来处理异常,否则终止运行

六、异常处理原则

  • 具体明确

    • 抛出的异常应能通过异常类的类名和异常信息来准确说明异常的类型和产生异常的原因
  • 提早抛出

    • 应尽可能早的发现并抛出异常,便于精确定位问题
  • 延迟捕获

    • 异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常