一、概述
在java等面向对象的语言中,异常本身就是一个类,产生异常就是创建异常对象并抛出一个异常对象。Java处理异常的方法就是中断处理。
Throwable类是java语言中所有错误或者异常的超类。其下有俩个子类一个是Error(错误,严重的问题)另外一个是Exception(可以解决的问题)。Java的异常分类如图所示:
其中受查异常是指编译时异常,非受查异常是指运行时异常(RuntimeException)
二、处理异常的方法
2.1 声明异常
2.1.1 声明受查异常
对于可能发生受查异常的代码,要么声明,要么捕获。在声明时,只需添加throws 异常类型即可,异常类型可添加多个。
【注意事项】
- 子类重写父类方法,子类的方法可以不声明异常,但是如果要声明异常,要么声明与父类相同的异常,要么声明其父类声明异常的子类。
- 如果父类声明了多个异常,那么子类要么声明与父类相同的异常或者部分相同的异常(子类也可),不能声明父类没有的异常。
- 如果被重写的方法没有异常,那么子类方法绝对不可以声明任何异常。
- 如果接口的实现类重写方法,异常声明要么声明与父类相同的异常,要么声明其父类声明异常的子类。
2.1.2 声明非受查异常
非受查异常不需要声明异常也不需要声明
2.2 抛出异常
在编写代码过程中尽量去判断可能发生异常的点,主动去抛出指定类型的异常。
【语法格式】
Throw 异常对象(new出来的对象);
抛出异常是指在堆内存中创建异常对象,使用throw关键字抛出具体的异常对象。(通过对输入的内容使用if进行判断抛出异常)
2.3 捕获异常
【作用】捕获异常并进行处理
【语法格式】
try{
可能出现异常的代码
}catch(异常类名 变量名){
异常处理的代码
}
【注意事项】
(1)什么情况下try…catch后的代码不执行
- throw抛出异常
- catch中没有正常进行异常捕获
- 在try中遇到return
finally中的代码无论如何一定会执行,因为是先执行finally后执行return.一般情况下,会将关闭数据库资源,IO资源,Socket资源等语句放在finally中
只有一句话能让finally的代码不执行:system.exit(任意int型的数字)
可以用“|”表示多个异常并列
(2)throw和throws的区别:
- 位置不同,throw在方法内部,throws在方法的声明处
- 内容不同,throw后接异常对象,throws后接异常的名称
- 作用不同 ,throw表示异常出现的源头,throws在方法的声明处,告诉方法的调用者该方法会出现异常,然后调用者进行处理,要么自己处理要么捕获
三、自定义异常
自定义异常一般继承RuntimeException
系列
Java(一):Java初识
Java(二):Java基础语法
Java(三):Java流程控制
Java(四):Java方法
Java(五):Java数组
Java(六):Java面向对象
Java关键字