【笔记】异常
前言
Java异常处理学习笔记
概念
- 封装错误信息的对象
错误信息
- 类型
- 提示消息
- 行号
常见异常的继承结构
Throwable
Error:系统级错误
ExceptionNullPointerException
ArrayIndexOutOfBoundsException
NumberFormatException
ClassCastException
ClassNotFoundException
…
catch
- 捕获异常
AException
、BException
:任意一种异常
1 | try { |
多个异常
1 | try { |
finally
- 不管出错还是不出错都会执行(无论
return
还是break
)
1 | try { |
throws
- 在方法上设置异常的抛出管道
1 | void function() throws Exception { |
- 方法上有默认的异常管道类型
RuntimeException
抛出多个异常
1 | void function() throws AException, BException { |
异常的注意事项
异常处理只有两种方式:
catch
和throws
异常处理,必须二选一
Java语法强制开发者事先考虑异常如何处理
初级开发者,可能会捕获,但不处理异常
方法重写时,异常管道不能比父类方法多
如何选择
- 底层异常,应该向前抛到前面处理
- 经验少时不知道该在什么位置捕获处理,应该选择throws
throw
- 手动抛出异常,执行异常的抛出动作
- 类比成return
创建异常
1 | AException e = new AException(); |
重载方法
<str>
:提示信息
1 | AException e = new AException(<str>); |
抛出异常
1 | throw e; |
异常包装
- 捕获的异常,包装成另一种类型,再抛出
1 | try { |
使用场景
- 不能抛的异常类型,包装成能抛出的类型,再抛
- 异常简化,把多种类型异常,简化成一种
自定义的异常
- 现有异常类型不能表示业务中所有的异常情况
过程
起一个合适的类名
- 本例为
用户名有误
异常
1 | public class UsernameNotFoundException { |
继承一个合适的异常父类
1 | public class UsernameNotFoundException extends Exception { |
添加合适的构造方法
- 参考父类构造方法参数,在子类添加相同的构造方法
无参构造
- 默认构造方法
String类型参数
- 异常信息的描述
Throwable类型参数
- 包装其他异常类型