异常都是写在方法里面的。
在JAVA中,异常是Throwable及其子类的实例对象。
Throwable类有两个子类:
—Error 错误 表示严重的错误,这个程序不应当由应用程序来捕获。
—Exception 异常 表示一个应当被捕获的错误条件
eg:OPP ———— JVM(JAVA虚拟机)————OS(操作)
( 严重错误)Error
在Throwable类中有两个方法,可以用于获取抛出异常的信息
—getMessage
—printstackVrace
异常类型
—checked 检查异常 编译时检验的异常
—unchecked 非检验异常(又叫JAVA异常) 非编译时检验的异常
判定一个异常但是编译异常还是非编译异常,看类是否直接或间接继承runtimeException,是则为运行时异常,否则是编译异常
异常抛出:
针对一个方法而言,在预知程序将要可能发生一种异常时向调用者提供一组错误的信息。
为什么要异常抛出:
为了给调用者提供一组有用的错误信息。
throwable new exception:当方法有某个地方它所需要的条件不满足的时候就需要对外抛出异常。
编译异常强制要求用try...catch捕获,运行期异常不要求try...catch捕获。
异常抛出方法:
—throws exception 声明方法+异常类型 可能抛出异常
—throw new exception(构造方法) 真正抛出异常对象
eg:
throw new runtimeException 运行期异常
(不会显示出来)
为什么要进行异常捕捉
当程序异常发生时,后面的程序将会终止,如想后面的程序需要继续运行,这时就需要异常捕捉。
异常传播
如果一个方法是异常的传播器,我们需要修改方法的声明类,声明方法传播的异常类型
一个异常捕获器(try...catch)包括一个抛出异常相匹配的catch程序块
eg:
public bb() throws Exception{
}
public aa() {
try{
bb(); //调用bb()方法
}catch(Exception a){
}
}
一个异常传播器不包括与抛出异常相匹配的catch程序块
一个方法可以成为一个异常的捕获器和另一个异常的传播器
如果有一段代码不管是否发生在异常抛出都是要被执行,我们使用关键字finally,即使在try...catch部分中具有任何数量的return语句时,try...catch块的finally字句将始终执行,除非使用System.exit(0)来终结程序
自定义异常:
public class Mywindow(){
public static void main(String[] args){
new Mywindow();
}
public void a() throws tonyException{
throw new tonyException("错误");
}
}
自定义异常:
public class tonyException extends Exception{
public tonyException(String a){
super("a")
}
}
以上是第八章学的,上面只是个人对它的理解及加以整理。