Throwable是所有异常了和错误类的基类
其中Error类是无法恢复的系统错误,用户应用程序中无法使用该类
我们要处理的是Exception类
Java异常:
运行期出现的错误
Java异常是java提供的用于处理程序中错误的一种机制
所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)
设计良好的程序应该在异常发生时提供处理这里错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果 (程序的健壮性)
java程序在运行中,如果引发一个异常,系统会产生一个与异常类型对应的异常了的对象,这个过程称为异常的抛出。
在捕获前处理该异常
当java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获异常。(程序发生异常时,如果不对异常进行相应处理,会引起程序执行的非正常终止。并将该异常打印到控制台
)
使用try…catch捕获异常,catch语句中需要设置要捕获类型的对象的类型,异常类型必须与try语句中可能抛出的异常类型一致,否则无法捕获到发生的异常
try {
System.out.println(2/0);
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("请与");
}
无法捕获
系统处理异常时会自动生成对象,e为对这个对象所起的名字,对象只有定义了才能使用。
(一旦产生错误,系统就会初始化,可以认为是形参)
Java程序运行时,出现异常,首先会找catch语句,若没有,会抛出异常,打印到控制台
Throws子句
方法后接Throws,表明该方法未对可能产生的异常进行相应处理,调用该方法必须用try…catch捕获异常或者继续throws抛出异常,否则发生编译错误
必须对异常进行处理(非runtimeexception)
Throw明确抛出异常
在一个try语句块中,基类异常捕获的语句不可以写在子类异常捕获语句的上面Try…catch
当try语句块抛出一个异常时,程序的执行流程首先转向第一个catch语句,如果抛出的异常与catch语句处理的异常类型相匹配,程序执行该catch语句块,如果不匹配,则继续对第二个catch语句进行检查,若没有匹配的catch,则由java运行系统处理该异常。
此时,系统会终止程序的运行,并在标注输出上输出该异常的相关信息
1 catch语句应该紧接在try语句后面
2 try语句块中,如果某个语句抛出异常,该语句后的其他语句不再执行,程序流程转向匹配的catch语句,继续运行
try {
语句1
语句2
}
catch (SomeException e1) {
…
}
catch (SomeException e2) {
…
}finally {
}
若语句1抛出异常,则语句2不再执行,转向catch语句,比如捕捉到异常1,则执行异常1中的语句后,跳至finally中的语句(必执行)
Finally一般用于资源的清除的工作
捕获异常后,可以使用该异常的一些方法来捕获信息
GetMessage ()方法,用来得到有关异常事件的信息
PrintStackTrace()方法,用来追踪异常事件发生时堆栈的内容
自定义异常:
1 通过继承java.lang.Exception类声明自己的异常类
2 在方法适当的位置生成自定义异常的实例,并用throw语句抛出
3 在方法的声明部分用throws语句声明该方法可能抛出的异常
重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常
一个图
五个关键字
先逮小的,再逮大的
异常和重写的关系