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 语句时,在编译