1.异常的概念
- 异常就是程序中的一些错误。但是不是所有的错误都是异常,并且异常是可以处理和避免的。
2.异常分类
- 检查性异常
- 检查性异常是由用户错误引起的异常,这也是程序员可以预见的,而且此种异常在编译的时候不会被忽略的。
- 运行时异常
- 运行时异常是可以避免的,编译的时候会被忽略
- 常见的异常(JDK内置异常)
- 运行时异常:
- ArithmeticException:算数运算异常
- NullPointerException:空指针异常
- ArrayIndexOutOfBoundsException:数组越界异常
- NumberFormatException:数字格式化异常
- ClassCastException:类型转换异常
- InputMismatchException:键盘输入类型不一致异常
- StringIndexOutOfBoundsException:字符串越界异常
- 检查性异常
- ClassNotFoundException:找不到类异常
- FileNotFoundException:找不到文件异常
- 运行时异常:
3.处理异常
3.1 使用try/catch处理
语法:
try{
//可能出现异常的代码
}catch(ExceptionType e){
//catch块
}
注意事项:
1.try中的代码块如果没有出现任何异常吗,那么catch块就不会执行。只有try出现了异常catch才会执行。而且catch只会针对指定的异常进行捕获和处理。
2.当try中出现了异常会阻止try异常点后的代码的执行,直接进入catch块(把异常对象传递给catch块)。
3.try中尽量包含少的代码。
4.try和catch块之间不允许存在任何代码。
3.2 多个异常处理
语法:
try{
//可能出现异常的代码
}catch(ExceptionType e){
//catch块
}catch(ExceptionType e){
//catch块
}catch(ExceptionType e){
//catch块
}...
3.3 finally关键字:
finally关键字是用于创建在try/catch后的代码块。不管try是否出现异常都会执行finally代码块。一般用于事故处理。
语法:
try{
//可能出现异常的代码
}catch(ExceptionType e){
//catch块
}finally {
//后续代码
}
注意事项:
- try和catch是相互依赖的,不能单独使用
- finally是可写可不写
- try和catch和finally块之间不允许存在任何代码
4. 抛出异常
直接使用throws关键字进行抛出异常。
public void method() throws FileNotFoundException {
FileInputStream fileInputStream = new FileInputStream("D://a.txt");
}
异常可以不进行try/catch捕获,直接使用throws关键字进行抛出,但是谁调用此方法谁处理
但是不推荐使用此方式(不是说不使用此方式,是不使用此方式把异常抛给别人,在自己的业务范围内可以抛出)。在开发中谁的异常谁处理
5. 自定义异常
5.1 创建自定义异常
语法:
public class 类名 extends Exception{
//构造方法
public 类名(形参类型 变量名){
super(变量名);
}
}
5.2 使用自定义异常类
public void 方法名 throws 异常类型 {
if()){
}else if()){
throw new 异常类型; //产生一个异常
}else{
throw new 异常类型; //产生一个异常
}
}
5.3 throw和throws的区别
throw和throws都是Java中处理异常的关键字,区别是throw用于抛出异常对象,主要用于代码中手动抛出异常,throws用于声明方法可能会抛出的异常。