异常
一、什么是异常
- 分类
- 检查性异常
- 运行时异常
二、异常体系结构
-
java中把异常当作对象来处理,并定义了一个基类
java.lang.Throwable
作为所有异常的超类 -
两类
-
错误
Error
-
异常
Exceeption
-
RuntimeException
(运行时异常)- 数组下标越界
- 空指针异常
- 算数异常
- 丢失资源
- 找不到类
- .......
这些异常一般是由长须逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生
Error
和Exception
的区别:Error
通常是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机一般会选择终止进程;Exception
通常情况下是可以被程序处理的,并且在程序中应该尽可能去处理这些异常
-
三、Java异常处理机制
-
抛出异常
-
捕获异常
-
try:监控区域
- catch:捕获异常
- 可以由几个catch组成,分别处理不同的异常
- 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
四、处理异常
五、自定义异常
六、使用异常的技巧
- 异常处理不能替代简单的测试
- 捕获异常所花费的时间大大超过了不捕获异常
- 使用异常的基本规则:只在异常情况下使用异常
- 不要过分细化异常
- 不要将每一条语句都分装在一个独立的try语句中
- 充分利用异常的层次结构
- 不要只抛出
RuntimeException
异常 - 不要只捕获
Throwable
异常
- 不要只抛出
- 不要压制异常
- 尽量处理所有的异常
- 在检测错误时,“苛刻”比放任更好
- 抛出异常而不是返回异常值
- 在出错的地方抛出一个异常好于后续抛出一个
NullPointerException
异常
- 不要羞于传递异常
- 通过
throw
抛出语句中的异常
- 通过