1、概念
- 异常是程序中的一些错误,但并不是所有的错误都是异常,且错误往往是可以避免的。若代码少分号,则运行结果提示java.lang.Error错误;若System.out.println(100/0),则产生java.lang.ArithmeticException异常。
2、分类
- 输入输出异常:IOException算术异常类;
- ArithmeticExecption空指针异常类:NullPointerException;
- 类型强制转换异常:ClassCastException;
- 操作数据库异常:SQLException;
- 文件未找到异常:FileNotFoundException;
- 数组负下标异常:NegativeArrayException;
- 数组下标越界异常:ArrayIndexOutOfBoundsException;
- 违背安全原则异常:SecturityException;
- 文件已结束异常:EOFException;
- 字符串转换为数字异常:NumberFormatException;
- 方法未找到异常:NoSuchMethodException。
3、异常处理方式
- 通过try、catch捕获异常
try{
// 程序代码
}catch(ExceptionName e1){
//Catch 块
}
- 通过throws抛出异常
定义方法时,可使用throws关键字对其进行声明。在此,需要强调:使用throws关键字声明的方法表示此方法不处理异常而交给方法调用处进行处理。
- throw关键字抛出异常
throw关键字作用是抛出一个异常,抛出的时候是抛出的是一个异常类的实例化对象,在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。
-
知识点拓展
try{return;}catch(){}finally{}return;
执行顺序:
a. 代码段首先进入try语句;
b. 因无异常抛出,代码将要return的内容保存在内存中;
c. 执行finally;
d. 因finally中无可执行内容,再转回try中执行return;
e. 整个代码段执行结束;
注: finally后面的return是不会执行的。
4、总结
- 不管有没有出现异常,finally块中代码都会执行;
- 当try和catch中有return时,finally仍然会执行;
- finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
- finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值;
- 异常的捕获、抛出和异常处理是维持代码健壮性的重要条件;
- 灵活使用异常及处理,不仅能最大限度的避免出错,也能增加软件的容错机制。