异常
异常定义
异常是运行过程中出现的错误
- 人为错误:填写错误等
- 随机错误:网络中断、内存耗尽等
一个健壮的程序必须处理各种各样的错误
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
NullPointerException
最常见的异常
空指针异常
由JVM抛出
如果一个对象为null,调用其方法或访问其字段就会产生
一般避免返回null
- 字符串使用””,而不是null
- 数组返回空数组,而不是null
如果调用方一定要根据null判断,比如返回null表示文件不存在,那么考虑返回Optional
从Java 14开始,如果产生了NullPointerException,JVM可以给出详细的信息告诉我们null对象到底是谁。
小结
自定义异常
在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。
一个常见的做法是自定义一个BaseException作为”根异常”,然后,派生出各种业务类型的异常。
完整思维导图
参考
www.liaoxuefeng.com
Original: https://www.cnblogs.com/lyphy/p/16290265.html
Author: Lyphy
Title: JAVA 异常 基本知识
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593089/
转载文章受原作者版权保护。转载请注明原作者出处!