1.异常分类
受不受检:编译器报不报错。
1)受检异常
就是非运行时异常。
外界因素造成,不是程序员的逻辑错误。
再怎么修改代码都不一定能杜绝。
是编译器要求必须处理的异常,不处理则编译器会报错的异常。指的是程序在运行时由于外界因素造成的一般性异常。
例如:
没有找到指定名称的类:java.lang.ClassNotFoundException
访问不存在的文件:java.io.FileNotFoundException
操作文件时发生的异常:java.io.IOException
操作数据库时发生的异常:java.sql.SQLException
2)非受检异常
就是运行时异常。
程序员的逻辑错误。
修改代码一定能杜绝。
编译器不要求必须处理的异常。是程序员应该积极避免其出现的异常
java.lang.RuntimeException及它的子类都是非受检异常。
例如:
错误的类型转换:java.lang.ClassCastException
数组下标越界:java.lang.ArrayIndexOutOfBoundsException
空指针访问:java.lang.NullPointerException
算术异常(除0溢出):java.lang.ArithmeticException
2.异常处理机制
1)try…catch捕获异常
所有的异常都继承于Exception
2)访问异常信息
e.printStackTrace();//将异常直接打印到控制台,但不会中断程序执行。
e.getMessage() ;//方法,用来获得有关异常事件的字符串信息。写日志的时候可能用。
3)使用finally回收资源(标准写法)
无论是否发生异常,都会执行finally里面这段代码。
try(){
}catch(){
}finally{
//input.close等。
}
即使有return,只要碰到return,也会跑完finally部分才会return。
3.异常的抛出
1).throws关键字
使用throws关键字的方法,此方法不处理异常,由调用方处理。
2)throw关键字
可手动生成一个异常并主动抛出。
if (failToDoSth) {
throw new Exception();
}