我对静态变量和全局变量之间的区别感到非常困惑。今天浏览Java教科书时,我的眼睛被“声明为静态的变量本质上是全局变量。声明对象时,不会复制静态变量”引起了我的注意。我很清楚为什么静态变量被其类中的所有对象共享,但我不明白为什么静态变量是全局变量。据我了解,静态变量在其类中只能被视为“全局”。
5 回答
静态变量可以(并且应该)使用Class.Variable
.
如果静态变量是public
.
public class MyClass {
public static int X = 5;
}
可以使用该类可用的任何地方访问
MyClass.X
没有实际的“全局”关键字或任何东西,但它接近其意图。
据我所知,内存是由调用该方法的 main 中声明的对象分配的。如果它调用非静态变量,则每次调用时都会对其进行初始化。另一方面,只为静态变量分配一次内存,然后在调用它时它的值保持不变。
静态变量和全局变量(Java)有什么区别?
不同之处在于 Java 中不存在全局变量。你的书甚至不应该提到它们。
我认为您的书(错误地)使用 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。
静态:仅存在一个具有该名称的变量。(虽然每个实例都存在实例变量)
全局:静态和可见性是公开的。
因此,每个全局变量都必须是静态的。
全局变量的示例是:java.lang.System.out