【Java面试指北】Exception Error Throwable 你分得清么?

读本篇文章之前,如果让你叙述一下 Exception Error Throwable 的区别,你能回答出来么?
你的反应是不是像下面一样呢?

  • 你在写代码时会经常 try catch(Exception)
  • 在 log 中会看到 OutOfMemoryError
  • Throwable 似乎不常见,但也大概听说过

一、Exception Error Throwable 关系

直接看下图,展示了三者之间的关系:

  • ThrowableErrorException 的父类。
  • Exception是程序正常运行中可预料的正常情况,应该被捕获并进行处理。
    • 又分为**可检查(checked)不检查(unchecked)**异常。
    • 可检查异常是在编译期检查的一部分,必须显示捕获处理。如有的方法 throw exception,那么调用该函数则必须 catch 处理或者再次 throw 出去交给下一层处理。
    • 不检查异常一般指运行时异常(RuntimeException),类似 ArrayIndexOutOfBoundsExceptionArithmeticException等。一般可由代码逻辑避免,可看情况是否捕获。
  • Error 一般是正常情况下不太可能出现的,绝大部分 Error 会导致程序处于不可恢复的状态,所以也不必捕获。如 OutOfMemoryError

image.png

二、对比一个 Error 和 Exception

你在面试中也许会被问到:

NoClassDefFoundError 和 ClassNotFoundException 有什么区别?

首先,我们看这俩名字,一个是 Error 另一个是 Exception,从上面的介绍以及看下面的继承图可以得到:ClassNotFoundException 应是编码时要被捕获的异常,NoClassDefFoundError 是编译通过了,但运行时产生的重大问题。
image.png

进一步的:
ClassNotFoundException 是运行中动态加载类时出现的问题。
举例来说,使用 Class.forName 来动态加载一个类,如果你不显示的 catch 处理,ide 都会给你提示,并且也过不了编译。

// 错误写法
public void except() {
   
    Class.forName("
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值