异常分为:
Exception : 运行时异常,我们需要捕获并且处理,让程序自己恢复正常运行。
Error : 编译时异常(程序本身无法处理的异常:系统崩溃,虚拟机报错,内存不足,内存溢出)。
直接上代码:
这里看到可以catch到的是Exception异常。有一些编译时可能会发生的异常也会提示我们throws抛出或者捕获,否则无法通过编译。
一步步来,先看看Exception和Error到底是个什么东西。
Exception:发现继承自Throwable
Error:(也是继承自Throwable)
所以Error和Exception两个异常类都继承自Throwable。这里借网上一张关系图:
知道了这些基本概念后,开始看编译时的字节码文件长个什么样,其中还包含了很多意想不到的小惊喜。
先编译并且查看字节码文件
其他操作指令介绍在我另外一篇博客,这里直奔主题!
彩蛋1:
这里有个很有趣的地方,明明代码里面只有一个finally,为什么这里有三个finally???那就是一个面试必问点,finally是异常机制中必定执行的语句块,在JVM字节码指令中为了确保它一定被执行,所有地方都会加一段这个finally要执行的代码。
(1)第一个地方,假设没有异常,正常执行后也执行finally里面的输出
(2)第二个地方。有异常,捕获处理完后,也执行finally里面的输出
(3)第三个地方。有异常并且没有捕获到,因为我们定义的运行时异常很多,如果指定的Type类型不对应catch到的,或者是