为什么java中没有全局变量?如果我喜欢在程序的所有类中使用任何变量,那么我该怎么做呢?
答案 0 :(得分:44)
如果确实想要这样做,请将其设为公共静态变量。
然而,建议你不要这样做 - 这样做不那么优雅,难以维护,更难以测试代码。
答案 1 :(得分:10)
全局变量(在Java上下文中 - public static
变量)很糟糕,因为:
难以维护 - 您无法设置断点或将每个更改记录到变量中,因此运行时的意外值很难跟踪和修复
难以测试 - 阅读Miško Havery's post
难以阅读 - 当有人看到他会想到的代码时:
要做出一个似乎需要的澄清 - 变量!=常量。变量发生变化,这就是问题所在。所以拥有public static final int DAYS_IN_WEEK = 7
就完全没问题了 - 没有人可以改变它。
答案 2 :(得分:9)
一些有效的全局“变量”是常量;-)例如: Math.PI
答案 3 :(得分:7)
C++ is multi-paradigm,而Java is pure "almost exclusively"
an object orientated。面向对象意味着每个数据都必须在对象内部。
请参阅链接以获取更多信息。
答案 4 :(得分:5)
为什么全局变形是邪恶的,here解释。
答案 5 :(得分:2)
如果您需要从程序的任何部分访问某个资源,请查看Singleton Design Pattern。
答案 6 :(得分:2)
我只想补充一点,如果你想使用一个恒定的全局变量,那么它是安全的。要使用它,请使用final关键字。例如:
public static final int variable;
答案 7 :(得分:1)
全局变量与OOP不相符合。还有一个可以将常量作为全局变量。从某种意义上说,singleton
是全局变量。如果要将常量作为全局变量,最好使用enums
。
编辑:
以前用Class.Constant
调用的常量现在可以使用Constant
使用static import
。这与C ++中的全局变量尽可能接近。
答案 8 :(得分:0)
package foo;
public class Globals {
public static int count = 3;
}
然后,您可以在任何地方访问它
int uses_global = foo.Globals.count + 1;
答案 9 :(得分:0)
Java旨在制作完全可移植的,完全可重用的对象。
根据定义,依赖于“全局变量”的东西不是完全可移植的或完全可重用的。它取决于新(重用)系统上存在的全局变量,它取决于操作该全局变量的新(重用)系统上的代码。那时,你最好把这个全局变量放到它自己的对象中。
答案 10 :(得分:0)
您可以使用包含字段synchronized和使用getter setter的静态类。直接更改公共静态字段是一种不好的做法。至少你可以使用get set方法来验证对字段的访问。
编辑:如果你正在低估至少发表评论,那么我就能理解为什么。