java-finally的使用

java-finally的使用

首先要知道jvm栈

(1).jvm栈是用来对方法进行入栈出栈的操作,一个线程一个栈帧,所以jvm栈是私有的,jvm栈的基本运行单位是栈帧,一个栈帧是包括是三个部分的,局部变量表,操作数栈,程序计数器

局部变量表是用来存放方法的参数,和方法内部定义的局部变量,操作数栈是用来进行具体数值的运算。程序计数器是用来记录程序运行的位置。

具备上边的知识后,基本可以理解为什么finally不可以改变返回值了。

int a=10;

return a+1

finally  a+4

在程序可以看到,首先会找到局部变量表10,将a的指针指向它,如果没有该变量则创建。之后,将局部变量的10复制到操作数栈顶,进行a+1的操作,在这个时候,正常的时候程序是会返回的,但是finally关键字是程序必须执行的,所以这个时候,会将操作数栈顶的11,复制到局部变量表中,然后将a+4进入到操作数栈顶,计算之后,将原来的11再入栈执行return,返回操作数栈顶的值。所以说finally一般是用来进行比较重要的收尾工作,而不是来计算返回值的,除非在finally中return才会进行返回

猜你喜欢

转载自www.cnblogs.com/fan123yh/p/11712859.html