Java常用异常整理
你这么优秀,一定会关注我↑↑↑,对吧~
版权信息|本文原作者“程序猿说你好”,转载自人云亦云。
整理下Java的常用异常。正确使用异常在实际编码中非常重要,但面试中的意义相对较小,因为对异常的理解和应用很难通过几句话或几行代码考查出来,不过我们至少应答出三点:异常类的继承关系、常用异常类、常用异常类的使用场景,下文将围绕这三点介绍。
异常类的继承关系
Java中,所有异常都继承自Throwable类(一个完整可用的类)。整体上分为Error、Exception两个大类,Exception大类又分为UncheckedException(继承于RuntimeException)和CheckedException(继承于Exception,但不继承于RuntimeException)。
为了帮助理解,我在每个类别下都给出了两个常用子类,如Error包OutOfMemoryError、AssertionError等;UncheckedException包括NullPointerException、IllegalArgumentException;CheckedException包括IOException、InterruptedException。面试画异常类的继承关系时,要求能清楚的说明几个类别并分类别举几个常用的异常类。
常用异常类
下面分类别扩充一下常用的异常类,字典序排序:
需要着重理解的是UncheckedException。
常用异常类的使用场景
常用异常还是有点多,下面分别讲解上述三个类别的使用场景,并在每个类别中选一个例子进行讲解。
Error
Error通常描述了系统级的错误,并且程序猿无法主动处理——当然,系统级错误也有可能由代码间接导致,这不在我们的讨论范围内。发生系统级错误的时候,系统环境已经不健康了,因此,Error不强制捕获或声明,也就是不强制处理,一般情况下只需要把异常信息记录下来(如果能记下当时的系统快照更好)。
OutOfMemoryError
当可用内存不足时,会由JVM抛出OutOfMemoryError。一般由三种原因导致:
堆设置过小,不满足正常的内存需求
代码中存在内存泄露,占用了大量内存而不能被回收
选择的GC算法与某些极端的应用场景不匹配,内存碎片过多,没有足够大的连续空间分配给对象
JVM抛出OutOfMemoryError前,会尝试进行一次Full GC,如果GC后可用内存还是不足,才会抛出OutOfMemoryError。因此,这时程序猿必然无法主动处理这一问题,只能等程序崩溃后再去查证原因。
UncheckedException
严格来说,Error也可以被划归UncheckedException,但我们更习惯用UncheckedException描述运行期发生,通常由于代码问题直接引起的程序相关的错误,并且程序猿无法主动处理。注意区分,系统级错误都应该用Error描述。UncheckedException发生的大部分情况是代码写挫了,因此,UncheckedException也不强制捕获或声明,也就是不强制处理,一般情况下记下日志即可。
不同的是,如果可能,要保证UncheckedException是可控的(在异常被动抛出前检查并主动抛出)。
NullPointerException
NullPointerException是最常见的UncheckedException。如果在一个空指针上引用方法或变量等,则运行期会抛出NullPointerException。空指针让程序变的不可控:如果任由空指针在程序运行期随意传递、使用,我们将无法确定程序的行为,也无法确定捕获NullPointerException时程序所处的状态。
解决这一问题的方法很简单:
尽早检查并主动抛出异常
单独、提前处理边界条件
尽量不使用null表示状态,特别是在集合中
前两条原则通用于大部分UncheckedException,可参考String#toLowerCase()的例子。第三条原则需要在代码的健壮与简洁之间做出权衡,有限保证简洁清晰,需要健壮再去健壮。
IOException
产生IOException的原因非常多,但很多时候我们并不关心细节原因,因为文件系统是一个不太可控的因素,这时我们可以以IOException为粒度处理;某些需要关心细节的异常情况,则应使用IOException的子类,以分情况处理。
前面总结的FileAlreadyExistsException、FileNotFoundException、UnknownHostException等,都是IOException的子类。这三种异常恰好都是可以处理的。
本文仅代表作者观点,与本公众号立场无关。
(版权声明:推送文章节选自网络,部分内容除非确实无法确认,我们都已取得授权并注明作者和来源。若涉及版权问题,烦请原作者联系我们。联系方式:270834121@qq.com)
END
敬
请
关
注
更多教育类资讯还可关注“恒智集团”
点击下方“阅读原文”查看更多成长干货。多多留言,小编就来勾搭你啦~
- 交警一眼识破车牌号异常:魔术贴伪造 前后不一
- 衡阳一男子吃5年素食精神异常,检查发现缺乏维生素B12
- 中医:女人出现这些异常,别躲了,是更年期!
- 牙线没有用 这话真的可信吗?
- 练习12.12|每日一练Java编程笔试面试题
- java初学者学习心得
- 高考英语[书面表达]常用高分短语与高频短语语境记忆!附巩固练习
- 男女密码大不同:男常用“password” 女偏好爱人姓名
- Java程序员编程的10个正确姿势
- 盘点!2017年这些流行语刷屏朋友圈,你最常用哪一句?