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

gir*_*iri 12 java

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

Jon*_*eet 44

如果您真的想这样做,请将其设为公共静态变量.

但是,建议您不要这样做 - 它使优雅更少,维护更难,更难以测试代码.

  • 作为Stack Overflow社区成员,我已经完成了自己的职责,我向Jon Skeet投票! (8认同)
  • Jon Skeet不需要社区; 宇宙已经充满了他的力量. (4认同)
  • Jon Skeet,Jeff Atwood和Joel会付钱给你吗? (2认同)
  • 你有幽默感吗? (2认同)

Boz*_*zho 10

全局变量(在Java上下文中 - public static变量)很糟糕,因为:

  • 难以维护 - 您无法设置断点或将每个更改记录到变量,因此运行时的意外值很难跟踪和修复

  • 更难测试 - 阅读MiškoHovery的帖子

  • 更难阅读 - 当有人看到他会想到的代码时:

    • 这来自哪里?
    • 在哪里读它?
    • 在哪里它被修改?
    • 我怎么知道它的当前价值是多少?
    • 在哪里记录?

做一个似乎需要的澄清 - 变量!=常量.变量发生变化,这就是问题所在.所以拥有一个public static final int DAYS_IN_WEEK = 7非常好 - 没有人可以改变它.


小智 9

一些有效的全局"变量"是常量;-)例如:Math.PI

  • 那么全局变量将是我们最不重要的问题 (7认同)
  • 如果pi的值发生变化怎么办? (4认同)
  • 它是一个定义的常量,以防它确实发生变化.然后只有一个地方可以进行更改,而不是通过3.22114(或其改变的任何内容)替换所有3.0引用!:-) (2认同)

Fra*_*k V 7

C++是多范式的,而Java则是"几乎完全"以物体为导向.面向对象意味着每个数据都必须在对象内部.

请参阅链接以获取更多信息.

  • 嗯......我以为他们是clabjects! (4认同)
  • 公平地说,Java以其他方式打破了"纯面向对象"的定义...... (2认同)

Ces*_*Gon 5

为什么全局变量是邪恶的,这里解释.