异常
异常定义
异常是运行过程中出现的错误
- 人为错误:填写错误等
- 随机错误:网络中断、内存耗尽等
一个健壮的程序必须处理各种各样的错误
Java的异常是class
-
Object
-
Throwable
-
Error
- OutOfMemoryError
-
Exception
-
RuntimeException
- NullPoiterException
- IllegalArgumentException
-
IOException
-
-
-
继承关系图
-
捕获要求
- Error 及其子类,RuntimeException及其子类不需要捕获
- Exception及其子类,不包括RuntimeException及其子类
必须捕获
异常捕获
try、catch、finally
-
try中一般放置可能发生异常的语句
-
catch 捕获异常
-
多catch则按顺序匹配
- 匹配到了则不再继续匹配
-
可以捕获子类异常
-
一个catch可以捕获多个异常,用”|“合并到一起
-
-
finally
- 不论是否发生异常都会执行的代码
- 不是必须的
- 总是最后执行
抛出异常
异常的传播
-
追踪
- printStackTrace()方法可以打印出调用堆栈
异常的转换
-
抛出过程中转换了异常类型
- 用旧异常构建了一个新异常然后抛出
printStackTrace的时候 关键字为Caused by
- 用旧异常构建了一个新异常然后抛出
try、catch、filnally
-
一般正常情况,再try中抛出异常,catch捕获异常,final运行保底代码
-
如果catch中抛出的异常,会在final运行完毕后抛出
-
异常屏蔽,如果final也抛出异常,将会屏蔽掉catch中的异常
- 解决方法,使用Trrowable的
addSupressed()方法。保留被屏蔽的异常信息。
在捕获处是同getSuppressed()方法获取被屏蔽的异常信息
printStackTrace的时候 关键字为Suppressed
- 解决方法,使用Trrowable的
NullPointerException
最常见的异常
空指针异常
由JVM抛出
如果一个对象为null,调用其方法或访问其字段就会产生
一般避免返回null
- 字符串使用”“,而不是null
- 数组返回空数组,而不是null
如果调用方一定要根据null判断,比如返回null表示文件不存在,那么考虑返回Optional
从Java 14开始,如果产生了NullPointerException,JVM可以给出详细的信息告诉我们null对象到底是谁。
小结
自定义异常
在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。
一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。
完整思维导图
参考
www.liaoxuefeng.com
来源:https://www.cnblogs.com/lyphy/p/16290265.html
本站部分图文来源于网络,如有侵权请联系删除。