为什么java中没有像C ++那样的全局变量?

时间:2010-01-28 20:24:19

标签: java

为什么java中没有全局变量?如果我喜欢在程序的所有类中使用任何变量,那么我该怎么做呢?

11 个答案:

答案 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方法来验证对字段的访问。

编辑:如果你正在低估至少发表评论,那么我就能理解为什么。

相关问题