[Java] 静态变数(static variable)分析

阅读时间: 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的值。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章