一、存放的是调用者的pc寄存器的值:
二、一个方法的结束,有两种方式:
1.正常执行完成。
2出现未处理的异常,非正常退出。
三、无论通过那种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出时,调用者的pc寄存器的值作为返回地址,即调用该方法的下一条指令的地址。而异常退出的,返回地址是通过异常表来确定,栈帧中一般不会保存这部分信息。
四、本质上,方法的退出就是当前栈帧出栈的过程,此时需要恢复上层方法的局部变量表, *** 作数栈,将返回值压入调用者的栈帧的 *** 作数栈,设置pc寄存器值等,让调用者方法继续执行下去。
五。正常完成出口和异常完成出口的区别在于:通过异常完成出口退出的不会给他上层调用者产生任何的返回值。
六、方法退出的指令:
(1)正常退出:
a.执行引擎遇到任意一个方法返回的字节码指令(return),会有返回值传递给上层的方法调用者,简称正常完成出口。
b.类型:根须方法返回值的实际数据类型而定。
c.ireturn:返回值是boolean,byte,char,short,int
lreturn:返回值是 long.
dreturn:返回值是double。
freturn:返回值是flot
areturn:返回值是 引用类型
return:返回值是void.
(2)异常退出:
a.概念:在方法执行的过程中遇到了异常,并且这个异常没有在方法内进行处理,也就是只要在本方法的异常表中没有搜索到匹配的异常处理器,就会导致方法退出,简称异常完成出口。
b.例子:
在字节码 4-8行中遇到异常,用字节码11行的异常处理器进行处理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)