JAVA 方法 · 动态栈帧

一次调用,一个独立栈帧

沿八个步骤观察实参求值、方法入栈、局部变量建立、返回值传递,以及调用者如何从等待位置恢复。

步骤 1 / 8

高亮代码

黄色行是当前事件发生的位置

1static double calculateTax(double amount) {
2    double rate = 0.06;
3    return amount * rate;
4}
5static double checkout(double amount) {
6    double tax = calculateTax(amount);
7    return amount + tax;
8}
9public static void main(String[] args) {
10    double result = checkout(120.0);
11    System.out.println(result);
12}
当前事件

实参求值

main 先计算 checkout(120.0) 的实参值;新方法尚未入栈。

动态栈帧

每张卡只保存本次调用自己的变量

当前栈顶:main 栈帧数量:1
调用栈底

即时判断:此刻谁在栈顶?

把步骤推进到“返回 7.2”。执行 return amount * rate;、尚未弹出栈帧的这一刻,谁在栈顶?

选择一个答案