【问题标题】:How are void methods popped from the call stack?void 方法是如何从调用堆栈中弹出的?
【发布时间】:2020-04-24 07:53:41
【问题描述】:

这似乎是一个愚蠢的问题。我尝试了不同的资源来了解 void 方法是如何从调用堆栈中弹出的。我无法弄清楚,寻求帮助。提前致谢。
一个简单的例子 -

public static void main(String args[]){
 int sum = sum(2,3);
 System.out.println(sum);
}
public static int sum(int first, int second){
   return first + second;
}

因此,对于上述情况,示例调用堆栈将分配两个堆栈帧,其中包含如下方法调用详细信息 -

【问题讨论】:

  • 它们遵循与非空方法相同的方法。想想 void 方法最后有一个return;。他们仍然有一个 return 声明,它只是隐含的。因此它们以相同的方式从堆栈中弹出。
  • 如果我们要明确的 return 语句是有意义的。我应该假设有一个return语句吗?
  • 编译后的字节码中肯定有return指令。
  • @SeanBright 出于好奇,有什么办法可以确定吗?
  • 可以看字节码。有工具可以做到这一点,大多数 IDE 都有某种字节码查看器。

标签: java callstack


【解决方案1】:

来自The Java® Virtual Machine Specification-Java SE 8 Edition [2.11.8]

...return 指令用于从声明为 void 的方法、实例初始化方法以及类或接口初始化方法返回。

因此以下两种方法的字节码是相同的(用BCV查看),即单个return指令:

public void test() {
    return;
}

public void test() {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2010-11-03
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多