异常
一、概念
Java的异常机制:
1) 执行到引起异常的语句时,生成异常对象(记录异常信息),并抛出;
2) 寻找catch语句,若找到则执行catch语句,异常到此为止;
3) 若找不到,继续上抛,直到找到;
4) 如在main方法中还未找到,程序中断;
5) 每抛出一层,结束本层程序。
异常分类:
1) 运行时异常:RuntimeException类及其子类,可通过编译。
2) 受检查异常:除去RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常。
异常的处理方式:
a. try\catch(finally):捕获异常;
b. throws:抛出异常(异常未处理,只是保证编译能够通过);
异常处理的语法结构:
Java的异常机制:
1) 执行到引起异常的语句时,生成异常对象(记录异常信息),并抛出;
2) 寻找catch语句,若找到则执行catch语句,异常到此为止;
3) 若找不到,继续上抛,直到找到;
4) 如在main方法中还未找到,程序中断;
5) 每抛出一层,结束本层程序。
异常分类:
1) 运行时异常:RuntimeException类及其子类,可通过编译。
2) 受检查异常:除去RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常。
异常的处理方式:
a. try\catch(finally):捕获异常;
b. throws:抛出异常(异常未处理,只是保证编译能够通过);
异常处理的语法结构:
try{
// 可能发生异常的代码
}catch(xx Exception 变量名){ // 发生异常时执行,catch由上而下执行,因此必须由小到大,catch语句块不能为空
// 异常处理语句
}finally{
// 一定会执行的代码
}
// throws用于向上抛出异常,但是不处理异常
二、特性
1) try代码块不能脱离catch代码块或finally代码块而单独存在。try代码块后面至少有一个catch代码块或finally代码块;
2) try代码块后面可以没有或有一个、多个catch代码块,还可以没有或有一个、多个finally代码块。若catch代码块和finally代码块
并存,finally代码块必须在catch代码块后面;
3) try代码块后面可以只跟finally代码块;
4) 在try代码块中定义的变量的作用域为try代码块,在catch代码块和finally代码块中不能访问该变量;
5) 当try代码块后面有多个catch代码块时,JVM会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,若异常对象
为某个异常类型或其子类的实例,就执行这个catch代码块,而不会再执行其他的catch代码块;
6) 若一个方法可能出现受检查异常,要么用 try...catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误;
7) throw语句后面不允许紧跟其他语句,因为这些语句永远不会被执行;
说明:
异常处理的合适位置应该遵循的规则:谁知道谁处理,谁负责谁处理,谁导致谁处理。
1) try代码块不能脱离catch代码块或finally代码块而单独存在。try代码块后面至少有一个catch代码块或finally代码块;
2) try代码块后面可以没有或有一个、多个catch代码块,还可以没有或有一个、多个finally代码块。若catch代码块和finally代码块
并存,finally代码块必须在catch代码块后面;
3) try代码块后面可以只跟finally代码块;
4) 在try代码块中定义的变量的作用域为try代码块,在catch代码块和finally代码块中不能访问该变量;
5) 当try代码块后面有多个catch代码块时,JVM会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,若异常对象
为某个异常类型或其子类的实例,就执行这个catch代码块,而不会再执行其他的catch代码块;
6) 若一个方法可能出现受检查异常,要么用 try...catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误;
7) throw语句后面不允许紧跟其他语句,因为这些语句永远不会被执行;
说明:
异常处理的合适位置应该遵循的规则:谁知道谁处理,谁负责谁处理,谁导致谁处理。
三、应用
修订:
修订:
参考:
注: