阅读时间: 5分钟
(1) 静态变数是属于class,但不是物件(Object)。
所以要使用静态变数时,在static method内可以不需要创建任何物件(Object)就可以使用。
例子1:
public class StaticTest { static int a = 1; int b = 2; public static void main(String[] args) { System.out.println("static variable a= " + StaticTest.a); StaticTest obj = new StaticTest(); //创建一个class物件(Object) System.out.println("instance variable b= " + obj.b); }}
如果要在static method内调用非静态变数,就必须创建一个class物件(Object),然后透过物件来调用非静态变数。
(2) 静态变数与非静态变数的差别在于它们对记忆体分配,每个静态变数只有佔用一个记忆体,
假如你有不同物件都使用同一个静态变数,它们将会只得到同一个值,而其中一个物件修改静态变数的值,也会影响到其他物件的静态变数的值。
例子2:
public class StaticTest2 { static int a; int b; public static void main(String[] args) { StaticTest2 obj1 = new StaticTest2(); obj1.a = 100; obj1.b = 101; System.out.println("obj1.a=" + obj1.a + ", obj1.b=" + obj1.b); StaticTest2 obj2 = new StaticTest2(); System.out.println("obj2.a=" + obj2.a + ", obj2.b=" + obj2.b); }}
静态变数a的值,通过 obj1或者obj2都只会指向同一个记忆体,换句话说,通过 obj1修改静态变数a会影响到obj2.a的值。
通过 obj2修改静态变数a会影响到obj1.a的值。
例项变数(instance variable) b,通过 obj1或者obj2都不会指向同一个记忆体,因为它是依赖物件而创建新的记忆体,所以obj1.b和obj2.b不是同一样东西,它们是分别独立存在。
通过 obj1修改静态变数b,是不会影响到obj2.b的值。
通过 obj2修改静态变数b,也不会影响到obj1.b的值。