1.定义
异常指的是在程序的运行过程中发生的不正常的事件,它会中断正在运行的程序
2.异常的分离
(1)编译异常(Exception):程序编译过程中发现的异常,受检异常
(2)运行时异常(RuntimeException):又称为非受检异常
(3)错误(Error):由Java虚拟机生成并抛出的异常,程序对其不做处理
3.异常的处理
(1)自己处理异常
1.单个异常处理
(1)语法
try{
//可能出现问题的代码
}catch(异常类型 异常名称){
//处理异常的代码
}finally{
//释放资源
}
(2)说明
catch中声明的异常类型应该和实际抛出的异常类型要么相同要么有继承关系才能捕获
2.多个异常处理
(1)语法
try{
//可能出现问题的代码
}catch(异常类型 异常名称){
//处理异常的代码
}catch(异常类型 异常名称){
//处理异常的代码
} ······
catch(Exception 异常名称){
//处理异常的代码
}finally{
//释放资源
}
(2)说明
1.try块中有多行代码,都有可能出现异常信息,程序执行的时候从上向下执行,当碰到异常情况的时候就会跳出try块,从而try块中的剩余代码就不会执行
2.异常类型书写顺序应子类写在前面捕获具体异常,父类写在后面
(2)将异常抛出:throws关键字
1.定义
通过throws关键字声明的方法表示此方法不处理异常,而是将异常交给调用者来处理
2.语法
修饰符 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2······{
//内容
}
3.注意
(1)如果一个方法声明的是编译时异常,则在调用这个方法之处必须处置这个异常(谁调用谁处理)
(2)在重写一个方法时,她所声明的异常访问不能被扩大
3.throw、throws、throwable
(1)throws用在方法名后面,跟的是异常类名,throw是用在方法体内,跟的是异常对象
(2)throws可以跟多个异常类名,用逗号隔开,throw只能抛出一个异常
(3)throws表示抛出异常,由该方法的调用者处理,throw表示抛出异常,由方法体内的语句处理
(4)throws表示出现异常的一种可能性,并不一定发生这些异常,throw则是抛出了具体的异常,真实的产生了一个Exception对象
(5)throw语法:throw new 异常类名("异常信息")
(6)throwable是Java异常体系的顶级父类,所有的异常和错误都继承自它
4.finally关键字
(1)定义
finally修饰的代码一定会执行,除非在执行到finally之前程序异常退出或者调用了系统的退出方法
(2)final、finally、finalize三者的区别
1.final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量变常量
2.finally是try catch语句中的一部分,表示要最终执行的代码,常用来做资源的释放
3.finalize:Object的方法,在垃圾回收的时候会用到的方法
5.自定义异常
自己定义一个异常,继承于Throwable或Exception...的子类