javajava try catch finally 字节码原理 finally语句为何一定会执行
Posted 九师兄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javajava try catch finally 字节码原理 finally语句为何一定会执行相关的知识,希望对你有一定的参考价值。
1.概述
以前只知道有这么回事,但是却不知道原理,在本章节了解到相关原理。本章出自《深入理解JVM字节码 》
Java中有一个非常重要的内容是try-catch-finally 的执行顺序和返回值问题,大部分书里说过finally 一定会执行,但是为什么是这样?下面来看看try-catch-finally 这个语法糖背后的实现原理。
2. try-catch字节码分析
下面是一个简单的try-catch的例子。
对应的字节码如下
-
第0~1行: aload_0指令加载this,随后使用invokevirtual 指令调用try[tOut1 方法,关于invokevirtual的详细用法在第3章会介绍,这里只需要知道invokevirtual 是方法调用指令即可。
-
第4行:goto语句是如果tryItOut1方法不抛出异常就会跳转到第13行继续执行
return指令,方法调用结束。如果有异常抛出,将如何处理呢? -
从第1章的内容可以知道,当方法包含try-catch 语句时,在编译单元生成的方法的
Code属性中会生成一个异常表( E
以上是关于javajava try catch finally 字节码原理 finally语句为何一定会执行的主要内容,如果未能解决你的问题,请参考以下文章
try-catch-finally 中哪个部分可以省略?try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?