异常(Exception)是程序在执行过程中所产生的问题
问题 错误(Error)
异常(Exception) 编译期异常(检查异常checked Exception)
运行期异常(不检查异常unchecked Exception)
凡是能够用代码去纠正的就是异常,错误是不能用代码去解决的问题
异常类型 父类Thowable类 Error
Exception Runtime Exception
非运行期异常
异常处理:①事前处理(提前加判断)
②事后处理(产生异常对象以后,用try----catch----finally)
try {
正常情况下有可能发生异常的代码
} catch (异常类型的引用){
处理代码
} finally {
不管 是否发生异常都必须要执行的代码
}
异常捕获不一定必须要在错误的地方,只要在异常返回给JVM之前,在任何位置异常都能try /catch
try块后面可以接多个catch块,但是catch块不能以简单的任意顺序列出,如果catch块有继承关系,要把子类异常卸载父类异常之前
finally就算前面有return或break等跳转语句,也要执行finally之后再跳转,只有exit能提前跳出
finally中一般写的都是资源的清理,通道的关闭,各种连接用完后的关闭
语法上:try----catch-----finally不能单独存在
try---catch;try -----finally; try -----catch-----finally都可以
③抛出异常:关键字:throw
throw:写在方法体当中,后面接的是一个异常对象,一旦执行到这句代码,就会真正执行异常抛出这个动作
若throw抛出的是一个runtimeException时,编译器不会强制要求写throws,写了也不会警告
当throw后面跟的是编译期异常(包括exception),编译器回强制要求本方法后面加上throws
throws:写在方法声明的最后,后面跟的是异常的类名,可以跟多个,中间用逗号隔开
警告方法的调用者本方法有可能回出现某种或某些类型的异常
自定义异常:
①首先要继承Throwable或者Exception,没有继承就不是异常
②要书写带参构造,将已发生的异常对象的信息封装到自定义异常对象身上
书写带参构造,讲业务异常的信息装入自定义异常对象身上
③添加自定义异常的特有方法