-1

我对静态变量和全局变量之间的区别感到非常困惑。今天浏览Java教科书时,我的眼睛被“声明为静态的变量本质上是全局变量。声明对象时,不会复制静态变量”引起了我的注意。我很清楚为什么静态变量被其类中的所有对象共享,但我不明白为什么静态变量是全局变量。据我了解,静态变量在其类中只能被视为“全局”。

4

5 回答 5

5

静态变量可以(并且应该)使用Class.Variable.

如果静态变量是public.

public class MyClass {
 public static int X = 5;
}

可以使用该类可用的任何地方访问

MyClass.X

没有实际的“全局”关键字或任何东西,但它接近其意图。

于 2013-10-21T14:20:33.950 回答
0

据我所知,内存是由调用该方法的 main 中声明的对象分配的。如果它调用非静态变量,则每次调用时都会对其进行初始化。另一方面,只为静态变量分配一次内存,然后在调用它时它的值保持不变。

于 2014-02-11T09:51:38.813 回答
0

静态变量和全局变量(Java)有什么区别?

不同之处在于 Java 中不存在全局变量。你的书甚至不应该提到它们。

于 2013-10-22T00:58:09.733 回答
0

我认为您的书(错误地)使用 global 作为描述与类相关的变量的更简单方法。

例如,参加这个课程:

public class Apple {
    private static int numberOfApples = 0;

    public Apple() {
        numberOfApples++;
        System.out.println(numberOfApples);
    }
}

每次创建 Apple 时,它​​都会增加 numberOfApples 变量并将其打印出来。如果您创建两个 Apple 对象,那么它将打印:

1
2

在这种情况下,静态变量由所有 Apple 实例全局共享,这可能是它的意思,但那是因为它与类相关联。这与其他语言中的全局变量不同。

编辑:正如其他人所提到的,您可以访问静态变量而无需任何类的实例化。如果我numberOfApples在创建任何 Apple 实例之前将其公开并打印出来,那么它会打印 0。同样,在创建两个 Apple 类然后销毁两个对象之后,我可以打印numberOfApples它会说 2。

于 2013-10-21T14:24:50.183 回答
0

静态:仅存在一个具有该名称的变量。(虽然每个实例都存在实例变量)

全局:静态和可见性是公开的。

因此,每个全局变量都必须是静态的。

全局变量的示例是:java.lang.System.out

于 2013-10-21T14:26:59.877 回答