为什么Java中没有全局变量?如果我想在程序的所有类中使用某个变量,怎么办?
如果你真的想要这么做,可以将它设置为公共静态变量。
然而,建议不要这样做,因为会导致代码不够优雅,难以维护和测试。
全局变量(在Java上下文中 - public static
变量)是不好的,因为:
难以维护 - 无法设置断点或记录每个变量的更改,因此运行时意外值将非常难以跟踪和修复
难以测试 - 参见Miško Havery 的帖子
难以阅读 - 当有人看到代码时会想知道:
需要澄清一点 - 变量不等于常量。变量会改变,这就是问题所在。因此,拥有一个public static final int DAYS_IN_WEEK = 7
是完全可以的 - 没有人可以更改它。
C++ 是多范式的,而 Java 几乎完全是面向对象的。面向对象意味着每个数据都必须包含在对象中。
更多信息请参见链接。
我想补充一下,如果你想使用一个常量全局变量是安全的。要使用它,使用final关键字。例如:
public static final int variable;
全局变量与面向对象编程不兼容。但是可以将常量作为全局变量。从某种意义上说,singleton
是全局变量。如果您想将常量作为全局变量,则最好使用 enums
。
编辑:
以前被称为 Class.Constant
的常量现在可以通过使用 static import
来使用 Constant
。这尽可能接近 C++ 中的全局变量。
package foo;
public class Globals {
public static int count = 3;
}
然后,您可以在任何地方访问它,如下所示:
int uses_global = foo.Globals.count + 1;
根据定义,依赖于“全局变量”的东西不是完全可移植或完全可重用的。它依赖于新(重用)系统上存在该全局变量,并且依赖于新(重用)系统上的代码操作该全局变量。此时,最好将该全局变量放入自己的对象中。