【问题标题】:What's the difference between the static variable and the global variable (Java)? [duplicate]静态变量和全局变量(Java)有什么区别? [复制]
【发布时间】:2014-02-11 17:51:38
【问题描述】:

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

【问题讨论】:

  • 对不起,java中没有全局变量。通常静态变量被称为全局变量。
  • 如果它们的可见性为public,则可以考虑全局变量。
  • java中没有全局变量。
  • Class SomeClasspublic static int someInt。这个someInt 可以被认为是“global”,因为它可以被包含该类的任何东西访问。

标签: java variables


【解决方案1】:

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

如果静态变量是public,则它们将始终全局可用。

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

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

MyClass.X

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

【讨论】:

  • 即使它们不是public,它们也是全局状态,特别是如果它们可以通过公共方法进行操作。
  • 谢谢你,Jeroen,你的回答消除了我的困惑。
【解决方案2】:

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

例如,参加这个课程:

public class Apple {
    private static int numberOfApples = 0;

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

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

1
2

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

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

【讨论】:

  • 如果您将其设为public,“与其他语言的差异”就会消失。
  • @Ingo 好点。我认为可以公平地说,由于其他可能的访问修饰符可用,传统上认为其他语言中的全局变量是 Java 中静态变量的子集?
  • 好吧...如果我们用 static 表示“既不是函数本地也不是动态分配”,而 global 表示“可以从其他模块编译单元,或具有相同固定名称的类似“我们在许多语言中都有相同的概念。恕我直言,Java 在这方面绝对不例外。
【解决方案3】:

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

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2018-04-23
        • 2018-12-22
        • 2011-01-14
        • 2016-01-17
        • 2013-01-06
        相关资源
        最近更新 更多