原链接
Kinds of variables in snapshot diagrams
画快照图时,要区分好这三种不同类型的变量
-
局部变量 (local variable)
在一个方法被调用时产生,调用返回时消失
如果对同一个方法有多次调用,那么每一次调用都会有相互独立的局部变量 -
实例变量 (instance variable)
当使用new
创建一个新的对象时,这个对象里的实例变量被随之创建,当对象被回收时,它也随之消失。
不同的对象直接的实例变量是相互独立的 -
静态变量 (static variable)
静态变量在程序启动时出现,更准确地说,在包含该变量的类第一次加载时出现,并在程序的剩余生命周期中一直存在
class Payment {
public double value;
public static double taxRate = 0.05;
public static void main(String[] args) {
Payment p = new Payment();
p.value = 100;
taxRate = 0.05;
System.out.println(p.value * (1 + taxRate));
}
}
在这段代码中,Payment类有一个静态变量taxRate
,也就是说,无论程序创建了几个Payment类型的对象,都只有一个taxRate
而value
则是实例变量,每一个Payment类型对象都会有自己的value
对于方法来说(这里是main),Payment p = new Payment();
创建了一个局部变量p,它将在方法结束的时候消失
局部变量通常画在方法的栈结构(stack frame)里;对象则用一个圆圈表示,里面包含着它自己的实例变量;静态变量和对象没有关系,一个类只有一个,因此要画在对象外