程序完成后程序终止,还是将控制权返回给调用函数?

Chr*_*ert 7 java

这是我参加的大学Java课程的一个问题.我的老师说答案是D - "程序终止",但我认为答案是C - "控制返回到方法C".

什么是正确答案,为什么?

如果方法A调用方法B,方法B调用方法C,方法C调用方法D,当方法D完成时,会发生什么?

A.控制返回到方法A.

B.控制返回方法B.

C.控制返回方法C.

D.程序终止

Ada*_*zyk 5

答案是c,除非方法D导致程序终止,那么答案是d.

方法调用的行为在invokevirtual操作码(操作代码)的定义中明确定义.从Java虚拟机在线指令参考:

invokevirtual调度Java方法.它在Java中用于调用除接口方法(使用invokeinterface),静态方法(使用invokestatic)以及处理的少数特殊情况之外的所有方法invokespecial.

例如,当您使用Java编写时:

Object x;
...
x.equals("hello"); 
Run Code Online (Sandbox Code Playgroud)

这被编译成如下:

aload_1       ; push local variable 1 (i.e. 'x') onto stack
ldc "hello"   ; push the string "hello" onto stack

; invoke the equals method
invokevirtual java/lang/Object/equals(Ljava/lang/Object;)Z
; the boolean result is now on the stack
Run Code Online (Sandbox Code Playgroud)

找到方法后,invokevirtual将调用该方法.(...)当invokevirtual调用的方法返回时,任何单个(或双)字返回结果都放在当前方法的操作数堆栈上,并继续执行字节码中invokevirtual之后的指令.