我对静态变量和全局变量之间的区别感到困惑。当我今天浏览Java教科书时,我的眼睛被“变量声明为静态的变量本质上是全局变量。当声明一个对象时,不会产生静态变量的副本。”我很清楚为什么静态变量被其类中的所有对象共享,但我不明白为什么静态变量是全局变量。根据我的理解,静态变量只能在其类中被视为“全局”。
答案 0 :(得分:5)
可以(并且应该)使用Class.Variable
访问静态变量。
如果静态变量为public
,则全局可用。
public class MyClass {
public static int X = 5;
}
可以使用
在课程的任何地方访问 MyClass.X
没有实际的“全球”关键字或任何内容,但它与其意图接近。
答案 1 :(得分:0)
我认为你的书(错误地)使用全局作为描述与类相关的变量的更简单方法。
例如,参加这个课程:
public class Apple {
private static int numberOfApples = 0;
public Apple() {
numberOfApples++;
System.out.println(numberOfApples);
}
}
每次创建Apple时,它都会增加numberOfApples变量并将其打印出来。如果您创建两个Apple对象,则会打印:
1
2
在这种情况下,静态变量由所有Apple实例全局共享,这可能是它的意思,但这是因为它与类绑定。这与其他语言的全局变量不同。
编辑:正如其他人所提到的,您可以访问静态变量,而无需任何类的实例化。如果我在创建任何Apple实例之前将numberOfApples
公开并打印出来,那么它将打印0.同样,在创建两个Apple类然后同时销毁这两个对象之后,我可以打印numberOfApples
它会说2。
答案 2 :(得分:0)
静态:只存在一个具有该名称的变量。 (虽然每个实例都存在实例变量)
全球:静态和可见性是公开的。
因此,每个全局变量必须是静态的。
全局变量的示例是:java.lang.System.out
答案 3 :(得分:0)
静态变量和全局变量(Java)之间有什么区别?
不同之处在于Java中不存在全局变量。你的书甚至都不应该提到它们。
答案 4 :(得分:0)
据我所知,内存是由在main中声明的对象分配的,它调用方法。如果它调用非静态变量,则每次调用它时都会初始化它。另一方面,内存只为静态变量分配一次,只要它被调用,它的值保持不变。