java异常处理
什么是异常
异常是运行时发生的错误,代码中的语法错误不是异常,而是编译错误。
异常的层次结构
Object
Throwable
Error(jvm层的)
Exception
受检查异常
运行时异常
java中处理异常的机制
捕获->抛出
处理异常的语法
try{
//语句块,可能产生异常的语句
}catch(异常类型 e){
//处理异常
}
关于try和catch使用的注意事项
- 每个try块可以对应多个 catch,如果catch中能捕获异常,则进行捕获,如果捕获不到,则继续向外抛出
- 每个try块中可以包含多行代码,一旦出现异常,try块中余下的代码不会执行
- 如果有多个catch块,那么父类的异常应该放在下方, 否则会编译出错。
关于finally
- 一个try块中可以最多包含一个finally(可以没有),并且放在try结构的最后
- 只要进行try块,finally中的代码一定会被调用(退出jvm除外),因此我们可将一定执行的代码(例如释放资源)放在finally中
- 一个try块中至少应该对应catch或finally中的一个
异常对象可由jvm和用户编码来创建并抛出:(throw 异常对象)
语法:
throw 异常对象
例:throw new ArrayIndexOutOfBoundsException(“数组下标越界”)
throws关键字
throws 放在方法声明之后,throws后面加入一个异常类;说明此方法会抛出一个某类型的异常
异常(Exception)的分类
- 运行时异常:可以不处理
- RuntimeException及其子类
- 受检查异常:必须处理,否则不能通过编译
- Exception及其子类
处理异常的两种方式
- 自行处理:通过try -catch自行解决
- 回避处理:将异常抛给调用者处理,优点是调用者可以自己决定如何处理异常(把处理权交给调用者)。
自定义异常
定义一个类,继承Exception或RuntimeException即可