Java中的静态变量和方法的范围

ete*_*nal 5 java

我对Java中静态方法的使用有些怀疑.我读了很多地方静态变量是独立于实例的,所以是全局的.

public class ThirdClass {
    public static var = "Java";
}

public class Second {
    public static void main(String[] args) {
        ThirdClass ob1 = new ThirdClass();
        System.out.println(ob1.var);   // prints Java
        ob1.var="Ruby";
        ThirdClass ob2 = new ThirdClass();
        System.out.println(ob2.var);   // prints Ruby
    }
}

public class First {
    public static void main(String[] args) {
        ThirdClass ob3 = new ThirdClass();
        System.out.println(ob1.var);   // prints Java again!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在第二类中看到的,ThirdClass的多个实例共享变量var的相同实例.但是First类中的一个单独的实例不能访问最终值"Ruby",而是显示原始的"Java".这意味着静态变量不是全局变量,而只是全局到单个执行!

与实例变量相比,还要创建静态变量资源密集型吗?

请建议.

cdh*_*wie 8

这意味着静态变量不是全局变量,而只是全局到单个执行!

他们当然是. 所有未持久存储到某种存储的变量(如硬盘)都不会在程序的不同执行之间保留其值.


Gor*_*vic 0

静态变量是“每个类”的。因此,此类中的静态变量是否与其他变量具有相同的名称/类型并不重要。

从某种意义上说,它是全局的,无论您有多少个该类的对象,如果您让它们使用静态变量,它们都将使用一个变量。