异常
1.介绍
Throwable 是error和exception的顶级父类
Error:错误 一旦出现表示程序出现了非常严重的问题,不处理不能继续向下运行
Exception:异常 表示程序出现了不太严重的问题,处理异常后可以继续执行代码
异常产生过程:代码出现问题,先创建对应的异常对象,然后根据方法的调用者一级级的向上抛,直到JVM。JVM做了两件事情:1、在控制台输出了异常信息 2、停止了程序的运行
throw:抛异常 在方法里面使用
在如果可能出现问题的代码,使用
throw new 异常类名();
异常类名(String str):str是向控制台输出的信息
throws:在方法名后面使用,如果调用的方法名上面有throws,那么调用方法者继续在方法名后面写上throws(或者处理掉异常)
2.异常分类
异常分为两大类:
1)、编译期异常:在编译期必须要处理,如果不处理,编译不通过。除了运行时异常(RuntimeException),其他就是编译期异常。
2)、运行时异常(RuntimeException):编译期不需要处理,运行时才出现问题,在运行阶段进行解决。
3.捕获异常
try …catch 格式
try{
可能出现异常的代码
}catch(异常类名 变量名){
处理异常的代码(if switch)
}
处理完毕之后,代码继续运行
3.自定义异常
1)、创建一个类,并且继承Exception
2)、如果要处理异常,使用try…catch()格式
3)、如果要给额外的提示信息,那么需要有参构造。
3.1)、在异常类中添加有参构造方法
3.2)、定义成员变量接收有参构造方法的参数
3.3)、提供get方法来让外部类获取提示信息
其实自定义异常,父类中已经提供了保存有参构造方法的参数的方法,所以可以直接使用super(String str)
4.异常的分组捕获
1).异常的处理方式如果完全相同,那么可以使用共同的父类进行处理
2).如果异常的处理方式都完全不同,那么只能用多个catch分别处理
3).如果异常的处理方式有部分相同,可以使用
catch(异常类1 | 异常类2 变量名){
处理方式相同的代码
}
注意点:前面catch中的异常不能是后面catch异常的父类.因为如果前面catch的异常处理的范围大,那么后面的catch中异常将没有作用,代码执行不到。
5.异常与重载
重载:在同一个类中,方法名相同,方法参数列表不同,根据传入的参数内容不同,就可以自动区分方法。
异常对于重载没有影响。
6.异常与重写
异常对于重写的影响:
1、如果重写的方法没有异常,就没有影响
2、重写的方法如果异常和父类方法的异常相同,没有影响
3、如果重写方法的异常是父类方法异常的子类,那么没有影响
4、如果 重写方法的异常 是父类方法 异常的 父类,那么不能使用
注意:以上4点针对于编译期异常
5、所有的运行时异常,对于重写是没有影响的。
7.肯定会被执行的代码块
finally {
}