什么是异常:
不正常,程序出现了问题
异常体系
Throwable
Error 错误,一般是一些处理不了的问题:内存不足,虚拟机问题 (绝症,治不好了)
Exception 异常 ,可以解决的问题,今天的重点 (感冒,可以治)
RuntimeException 在RuntimeException体系中都是运行时异常
..... 在Exception中除了RuntimeException之外,其他的都是编译期异常
异常的分类
编译期异常:编译期不处理就不能编译通过(或者说编译期要求我们对异常进行一个预处理)
运行时异常:编译期没有问题,但是运行之后产生的问题
编译期异常,要求我们处理它,但是不意味着异常已经发生了。
举例: 签合同:如果迟到罚款500(签完合同不意味着你需要缴纳500罚款,而是给一个预处理方案,如果犯错误才罚款)
异常的处理
抛出异常(throws)
在方法的声明的小括号后: throws 异常类型(还可以抛出异常的父类型)
捕获异常:try...catch
try {
有可能出现异常的代码; 如果出现异常了,则会产生一个异常对象
}catch (需要捕获的异常类型 变量名) { 跟catch中的异常类型进行匹配,如果匹配上了,则会将异常对象赋值给变量
异常的处理; 此处可以针对异常的类型给出针对性处理方案
}
在一个catch中可以定义多个异常,用|隔开:catch(ArrayIndexOutOfBoundsException | NullPointerException e)
catch块中通常如何处理异常:
1. 打印异常信息
2. 写入错误日志
3. 将编译期异常转换成运行时异常,让方法的调用者处理此异常。
多异常处理
一个try,多个catch
注意:父类异常的catch语句必须在子类异常catch语句后面
finally
try {
有可能出现异常的代码; 如果出现异常了,则会产生一个异常对象
}catch (需要捕获的异常类型 变量名) { 跟catch中的异常类型进行匹配,如果匹配上了,则会将异常对象赋值给变量
异常的处理; 此处可以针对异常的类型给出针对性处理方案
} finally {
无论如何只要JVM还活着,此处代码就一定会执行
通常将一些收尾的工作,比如释放资源,放在finally中
}
编译期异常和运行时异常的区别解析
只有一点区别:编译期异常必须在编译期进行处理(抛出/捕获),否则编译失败
|
|