JVM的异常处理

Posted cathyqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM的异常处理相关的知识,希望对你有一定的参考价值。

异常处理的两大组成要素:抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。

抛出异常分为:显式和隐式两种。

显式抛异常的主题是应用程序,它指的是在程序中使用 “throw”  关键字。手动将异常实例抛出。

隐式抛异常的主题是java虚拟机,它指的是java虚拟机在执行过程中,碰到无法继续执行的异常状态,自动过抛出异常。举例来说,java虚拟机在执行读取数组操作时,发现输入的索引值是负数,故而抛出数组索引越界异常(ArrayIndexOutOfBoundsException)。

捕获异常则涉及了如下三种代码块:

1、try代码块:用来标记需要进行异常监控的代码。

2、catch代码块:跟在try代码块之后,用来捕获在try代码块中触发的某种类型的异常。除了声明所捕获异常的类型之外,catch代码块还定义了针对该异常类型的异常处理器。在java中try代码块后可以跟多个catch代码块,来捕获不同的异常。java虚拟机会从上至下匹配异常处理器。因此,前面的catch代码块所捕获的异常类型不能覆盖后面的,否则编译器会报错。

3、finally代码块:跟在try代码块和catch代码块之后,用来声明一段必定运行的代码。它的设计初衷是为了避免跳过某些关键的清理代码。例如关闭已打开的系统资源。

在程序正常执行的情况下,这段代码会在try代码块执行之后执行。否则,也就是在try代码块抛异常的情况下,如果该异常没有被捕获,finally代码块会直接运行,并且在运行之后重新抛出异常。

如果该异常被catch代码块捕获,finally代码块则在catch代码块之后运行。在某些不幸的情况下,catch代码块也触发了异常,那么finally代码块同样会执行,并会抛出catch代码块触发的异常。在某极端不幸的情况下,finally代码块也触发了异常,那么只好中断当前finally代码块的执行,并往外抛出异常。

 

以上是关于JVM的异常处理的主要内容,如果未能解决你的问题,请参考以下文章

Jvm(49),指令集----异常处理指令

JVM 是如何处理异常的?

JVM 中的异常处理

《深入理解Java虚拟机》- JVM如何进行异常处理

JV默认是如何处理异常

还搞不清楚JVM是怎么处理异常的?这水平,跳槽都没人要