1 Error 与 Exception 概述

  1. Error 是用户无法处理的错误,Exception 是捕获后可以尝试恢复的异常。
  2. 常见的错误与异常:
    • Error:
      • ClassNoDefFoundError:找不到类定义错误
        • 导致原因:
          (1) 类依赖的 class 或 jar 文件不存在了,比如编译之后删除;
          (2) 依赖的文件存在,但并不在同一个域中;
          (3) javac 编译时无视文件名大小写,导致得到的 class 文件可能与我们想要的不同;
      • StackOverflowError:深递归导致的栈溢出
      • OutOfMemoryError:内存溢出错误
    • Exception:
      • RuntimeException:运行时异常,只在程序运行时抛出
        • NullPointerException:空指针异常
        • ClassCastException:类转换异常
        • IndexOutOfBoundsExcpetion:索引越界异常
        • IllegalArgumentException:传递非法参数异常
      • CheckedException:受检查异常,在编译期间检查
        • IOException
        • ClassNotFoundException

2 异常处理

  1. Java 异常处理机制
    • 捕获:寻找合适的异常处理器进行处理;
    • 抛出:创建异常对象,交由运行时系统处理;
  2. 异常处理原则
    • 具体明确:异常的类名和参数要准确描述异常的类型和导致原因;
    • 提早抛出:有助于准确定位异常位置;
    • 延迟捕获:将异常处理范围扩大,掌握更多信息有助于处理异常;
  3. 异常处理的缺点
    • try-catch 代码块影响 JVM 优化;
    • 创建异常对象需要保存栈快照等信息。