在我们写代码的时候,经常的出现一些小问题,那么为了方便我们处理这些问题,java为我们提供了异常机制。
异常包含了错误的类型,原因以及位置。
异常:不正常,我们在代码的时候出现的编译或者运行时的错误。
异常的体系结构:
Throwable(最顶层)
- Error:出现的不能够处理的严重问题。
- Exception:可以处理的一些问题。
异常的处理方式:
- 捕获处理:try…cath语句
格式:
try{
有可能出现问题的代码;
}catch(){
处理异常;
}
try…catch的执行顺序:
首先执行try语句
如果发现异常,异常下面的代码不在执行,直接跳入跳入catch语句中。catch语句结束后,整个try…catch结束。
如果没有发现异常,try语句执行结束后,try…catch直接结束,不在执行catch语句 - 抛出去 :
当我们不想处理异常,或者没有能力处理异常的时候,我们可以选择抛出异常,谁调用方法谁处理异常。
使用关键字throws在方法的声明出抛出异常
jvm处理异常的方式:
1 如果出现异常我们没有处理,jvm会帮我们进行处理。它会把异常的类型,原因还有位置显示在命令行,并且还终止了程序,异常后面的代码将不会在执行。
如何处理多个异常:
1 可以使用多个try…catch语句
2使用一个try和多个catch
多个catch之间的顺序:
(1)多个catch之间可以有子父类
(2)平级之间没有顺序关系
` (3)如果有子父类,父类异常必须放在后面
Throwable的常用方法:
(1)String getMessage()原因
(2)String toString()类型和原因
(3)void printStackTrace()类型原因和位置
finally: 组合try…catch使用,用于释放资源等收尾工作,无论try…catch语句如何执行,finally的代码一定会执行
格式:
try( ){
有可能出现问题的代码;
}catch(异常对象){
}finally{
释放资源
清理垃圾
}
异常的分类:
(1)运行时期异常
RuntimeException的子类就是运行时期异常,在编译时期可以自由选择处理或者不处理。
(2)编译时期异常
是Exception的子类,非RuntimeException的子类在编译时期必须处理