4.7 栈图
将 4.6 节的代码片段组合起来可以得到完整的类定义,如下:
public class PrintTime {public static void printTime(int hour, int minute) {System.out.print(hour);System.out.print(":");System.out.println(minute);}public static void main(String[] args) {int hour = 11;int minute = 59;printTime(hour, minute);}}
printTime 有两个形参——hour 和 minute。main 有两个变量,也分别名为 hour 和 minute。虽然名称相同,但这些变量是不同的变量:printTime 中的 hour 和 main 中的 hour 指向不同的存储位置,可以有不同的值。
例如,你可以像下面这样调用 printTime:
int hour = 11;int minute = 59;printTime(hour + 1, 0);
调用这个方法前,Java 会先计算实参的值,这里分别为 12 和 0,然后将这些值赋给形参。在 printTime 中,hour 的值为 12,而不是 11,而 minute 的值为 0,而不是 59。另外,即便 printTime 修改了其形参的值,但不会影响 main 中的变量。
要想对程序的方方面面进行跟踪,一种方法是绘制栈图(stack diagram)。栈图是一种显示方法调用的状态图(参见 2.3 节)。对于每一个方法,栈图中都有一个名为栈帧(frame)的方框,其中包含了这个方法的形参和变量。方法名位于栈帧的外面,而变量和形参则位于栈帧内。
与状态图一样,栈图也显示了变量和方法在特定时点的状态。图 4-1 是方法 printTime 刚执行时的栈图。

图 4-1:PrintTime 的栈图
