Java 异常处理
1、Java的异常处理思想:(面向对象思想)
为对应的异常提供了相应的异常类,在异常类中就描述了该异常的所有信息,然后当出现相应的异常时就抛出该异常的对象,该异常对象就表示该异常类,就是封装了该异常的所有信息。
2、异常体系
异常类的结构关系
Throwable ---- 根类
1、Error ---- 错误
一般是JVM抛出的严重性的问题,这种问题一般都是代码的错误问题,无法像异常一样去针对性处理,必须修改代码;
2、Exception ---- 异常
程序运行中出现的不正常情况,而异常情况的出现是正常的,就可以针对性处理:
1)编译时异常
a、编译时出现的异常;
b、一般是定义的方法本身存在问题,编译不让通过;
c、继承自Exception类及其子类(RuntimeException及其子类除外)的一场都是1编译时异常;
d、除了在方法体中使用关键字throw抛出相应的异常对象,还需在方法的声明之后使用关键字throws声明该方法可能要抛出的异常类型(类名);
2)运行时异常:
a、编译通过运行时出现的异常;
b、一般是方法本身没有问题,编译可以通过,但是在调用方法的期间出现问题,无法正常运行
c、继承自RuntimeException类及其子类的异常都是运行时异常;
d、只需要在方法体中使用关键字throw抛出相应的异常对象;
3、throw关键字和throws关键字的区别:
1)throw在方法体中抛出异常对象,一次只能抛出一个异常对象,如果需要抛出多个异常对象则需要多个throw;
2)throws在方法的声明最后,用于声明方法可能抛出的异常类型,其可以指定抛出的多个异常类型,多个异常类型之间使用‘,’分隔;
3、自定义异常
1、自定义的异常类必须属于异常体系(通过继承完成),只有异常体系内才具有可抛性;
2、在自定义的异常类中提供相应的构造器,然后去访问其所继承的父类的对应构造器;
4、异常的处理方式
1、抛出:
被调用方法将异常抛出给调用方法,调用方法再抛给类,类对象抛给主方法,最后抛给虚拟机,虚拟机将异常信息显示再控制台上;
2、捕获:
try{
被检测代码
}catch(捕获到被检测代码抛出的异常类型 异常对象名){
异常处理代码
}finally{
必须执行的代码
}
1)try中代码没有异常,就正常执行try中的代码;如果try中代码有异常且抛出了异常,catch块就会捕获try中抛出的异常对象并执行catch中的代码内容并进行处理;
2)try catch finally不是一个固定的语句块,其实是三个独立的语句块,只不过是这三个语句块经常放在一起使用;
3)finally块中的内容是始终都要执行的,一般用于在finally关闭资源;
4)子父类间覆盖父类方法时:
a、父类没有抛出异常,子类覆盖父类方法时不能抛出异常,只能进行捕获处理;
b、父类方法抛出多个异常,子类方法只能抛出在父类抛出范围的异常;
c、父类方法抛出异常,子类可抛出可捕获;