跳转至

异常

一、什么是异常

  1. 分类
  2. 检查性异常
  3. 运行时异常

二、异常体系结构

  1. java中把异常当作对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类

  2. 两类

  3. 错误Error

  4. 异常Exceeption

    1. RuntimeException(运行时异常)

      1. 数组下标越界
      2. 空指针异常
      3. 算数异常
      4. 丢失资源
      5. 找不到类
      6. .......

      这些异常一般是由长须逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生

      ErrorException的区别:Error通常是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机一般会选择终止进程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能去处理这些异常

三、Java异常处理机制

  1. 抛出异常

  2. 捕获异常

  3. try:监控区域

  4. catch:捕获异常
    1. 可以由几个catch组成,分别处理不同的异常
  5. finally:处理善后工作(可以省去)
try{
    System.out.println(a/b);     //可能发生异常的语句
}catch(ArithmeticException e){
    System.out.println("程序出现异常,变量b不能为0");
}finally{
    System.out.println("finally");
}

五个关键词:try, catch, finally, throw, throws

四、处理异常

五、自定义异常

六、使用异常的技巧

  1. 异常处理不能替代简单的测试
    • 捕获异常所花费的时间大大超过了不捕获异常
    • 使用异常的基本规则:只在异常情况下使用异常
  2. 不要过分细化异常
    • 不要将每一条语句都分装在一个独立的try语句中
  3. 充分利用异常的层次结构
    • 不要只抛出RuntimeException异常
    • 不要只捕获Throwable异常
  4. 不要压制异常
    • 尽量处理所有的异常
  5. 在检测错误时,“苛刻”比放任更好
    • 抛出异常而不是返回异常值
    • 在出错的地方抛出一个异常好于后续抛出一个NullPointerException异常
  6. 不要羞于传递异常
    • 通过throw抛出语句中的异常

七、总结