思维导图
1.概念:
在Java语言针对非正常情况进行封装,最后通过异常处理机制解决。
2.异常体系:
1.Error:是比较严重的错误,仅靠程序本身是不能恢复执行的。
2.Eception:
1.RuntimeException:原因由于程序本身逻辑出现错误,编译可以通过,运行时会报错。处理方式:我们可以不用处理,交给JVM处理(中断程序)。
2.其他子类:
1.抛出异常:作用:在指定的方法内声明,我们必须处理这个异常对象。
方法:使用throws关键字对方法调用者进行声明,最终交给JVM。
使用格式:修饰符 返回值类型 方法名(参数列表) throws xxxException...{throw new xxxException("产生原因");}
注意事项:1.throws 必须写在方法声明处
2.throws后面的接的必须是Exception或者Exception子类
3.如果方法内部抛出多个异常,则必须声明多个异常。如 果异常中包含子父类关系,可以直接声明父类。
4.调用声明异常的方法,就必须处理要么try...catch要么 继续抛出。
2.try...catch:格式:try{//可能报错的代码}catch(xxxException e){异常的逻辑处 理}finally{//必须执行的代码
多个异常的捕获:1.多个异常分别处理
2.多个异常一次捕获分别处理(catch中的子类 要 放在前面,因为异常是从上外下依次对应)
3.多个异常一次捕获一次处理
注意:如果发生异常执行完try、catch、finally语句;如果没有发生 异常。执行完try中语句,继续执行finally语句后的代码
finally语句:语句是必须执行代码,不管是否发生异常。finally语句 中有return语句,永远返回finally语句中return语句
3.异常机制:如果程序如果程序出现异常JVM会做两件事:一、1.JVM根据异常的原因创建一个异常对象,这个异常对象包含了异常产生的(内容、原因、位置)2.在方法中没有异常处理逻辑(try...catch),那么JVM就会把异常对象抛给方法的调用者,main方法处理
二、main方法收到了这个异常对象,main方法也没有处理异常的逻辑,继续把对象抛给main方法的调用者JVM处理
三、
JVM接受到了者个异常对象,做了两件事,1.把异常对象(内容,位置,原因)打印在控制台上
2.JVM会终止当前正在执行的Java程序。
4.自定异常:格式:
public class XXXException extends Exception|RuntimeException{
添加一个空参数的构造方法
添加一个带异常信息的构造方法
}
注意:一般时以命名Exception结尾
2.自定义类必须继承Exception||RutimeException
继承Exception,那么自定义的异常类就是一个编译期异常,如方法内部抛出了编译期异常,就是处理这个异常,要么throws 要么try..catch
继承RuntimeException:那么自定义异常类就是一个运行期异常,无需处理。
子父类异常:
如果父类抛出多个异常,子类重写父类方法时,抛出相同和父类相同的异常或者是父 类异常的子类或者不抛出异常。
父类方法没有抛出异常,子类重写该方法时也不可抛出异常。此时子类产生异常只能 捕获处理,不能声明抛出
注意:父类异常时什么样,子类异常什么样。
代码的实现:
public class Main {
public static void main(String[] args){
try{ show01();
}catch(ArithmeticException e){
System.out.println(e);
}finally{
System.out.println("释放资源");//捕获
}
}
public static void show01()throws ArithmeticException{//抛出异常对象
int a=5,b=0;
if(b==0)
throw new ArithmeticException("分母为零");
else
System.out.println(a/b);
}
}
//自定义异常
public class AAAException extends ArithmeticException{
public AAAException(){
super();
}
public AAAException(String message){
super(message);
}
}