为什么Java程序中不鼓励使用全局变量?

为什么Java程序中不鼓励使用全局变量?,java,global-variables,Java,Global Variables,我是编程新手,我很困惑为什么有些人坚持认为全局变量是坏的。我目前正在编写一个程序,其中包含几个类以及大量检查和重写存储在变量中的数据。我发现全局变量非常有用,因为我不需要为每个局部变量或类变量创建getter和setter。通过使用全局变量作为不同类之间的桥梁,我发现在这些类之间交换信息非常容易 但是,我还是一个编程新手,如果有人能向我解释为什么不建议这样做,我将不胜感激 编辑:我道歉!我不知道全局变量和公共类变量是完全不同的,显然我错误地将公共字段识别为全局变量。你永远不会知道一个初学者会犯多

我是编程新手,我很困惑为什么有些人坚持认为全局变量是坏的。我目前正在编写一个程序,其中包含几个类以及大量检查和重写存储在变量中的数据。我发现全局变量非常有用,因为我不需要为每个局部变量或类变量创建getter和setter。通过使用全局变量作为不同类之间的桥梁,我发现在这些类之间交换信息非常容易

但是,我还是一个编程新手,如果有人能向我解释为什么不建议这样做,我将不胜感激


编辑:我道歉!我不知道全局变量和公共类变量是完全不同的,显然我错误地将公共字段识别为全局变量。你永远不会知道一个初学者会犯多么愚蠢的错误,哈哈。谢谢大家让我注意到这一点。

问题是这种做法无法扩展。随着项目变得越来越复杂,或者涉及到更多的合作者,全球化带来了混乱和错误,因为跟踪可能的副作用变得越来越困难。“左手不知道右手在做什么。”或者至少,没有大量的测试和研究——增加了维护成本

你可以阅读一本关于最佳实践的书,比如罗伯特·C·马丁的经典著作《干净的代码》


在安全性方面也出现了类似的情况,我们有授权的概念。

真正理解面向对象编程需要一段时间。全局变量的大问题与getter和setter的问题是相同的,即公开任何内容或扩展超类。您正在对涉及全局变量或setter或getter的每一段代码做出承诺,这些代码/您将不会更改已公开的实现/实现。现在没关系。两年后,如果100000行依赖于该变量,现在您意识到“intx,y”实现细节应该是“intx,y,z”,会发生什么?想花一个周末来追踪和修复成千上万的代码引用吗?现在想象一下,这个问题乘以您不必要地向代码用户公开的所有状态实例…

您是否在问为什么人们不只是公开字段?公共字段实际上与全局变量不是一回事。自从结构化编程成为一种事物以来,全局变量就被禁止了。这比Java早了几十年,我想你指的是Javascript。这是两种不同的语言。在Java中不能真正拥有全局属性。每个属性都是在一个对象(或静态道具的类)的范围内定义的。Java中没有全局变量。不清楚你在问什么。还不清楚这怎么可能是一个关于Python的问题的重复,这个问题本身已经结束了。@Marqueisoflorne,虽然重复的问题特别提到Python,但答案是语言不可知论的。虽然Java中没有真正的全局变量,但可以使用公共、静态、非最终字段。