为什么Java中没有全局变量?

时间:2011-04-07 12:45:17

标签: java global-variables

为什么Java中没有全局变量?

6 个答案:

答案 0 :(得分:24)

全局变量通常是设计缺陷。

您的组件应该是独立的,不需要任何全局状态 相反,请使用私有静态字段。

答案 1 :(得分:9)

答案是你的问题是,因为Java不支持全局变量。 Java的设计考虑了面向对象的原则,因此Java中的每个变量都是本地人或班级成员。

静态类成员是全局可访问的,这肯定是全局变量的一种可能定义,具体取决于您对该术语的解释。要迂腐,静态类成员可以通过类名访问,因此跨多个范围,它们仍然是类成员;因此不是真正的全局变量。

Java缺乏对全局变量的支持是一件好事,因为使用全局变量是一种设计反模式。

答案 2 :(得分:2)

实际上与全局变量有一定的相似性 - 您可以使用系统属性,将它们设置在一个类中并在另一个类中读取它们。对于相当复杂的企业环境,这实际上很常见。例如,JBoss通常提供定义和访问系统属性的机制。

答案 3 :(得分:1)

如果它是您正在使用的Web应用程序,那么您可以将会话变量用作全局变量....这将在Web应用程序的所有页面中可用...

答案 4 :(得分:1)

我们可以使用静态类来保存Global / Application变量 例如

//Global Class
public class GlobalClass {
            public static String globalVariable = "globalValue";
    }



//Main Method
public static void main(String args[]){

      System.out.println("globalVariable:"+GlobalClass.globalVariable);
      GlobalClass.globalVariable = "newglobalValue";
      System.out.println("globalVariable:"+GlobalClass.globalVariable);

   }

答案 5 :(得分:1)

理性原因是全局变量通常是一个坏主意,因此将它们排除在语言之外没有任何缺点。

然后有一个实用的语法原因:Java中的所有内容都需要根据语法在类的范围内定义。因此,在没有更改Java的范围规则的情况下,您可以放置​​命名变量并不存在任何“全局”。可以说,Java在语法中允许的最接近的东西是类的“公共静态”成员,可以在很多方面像全局变量一样使用。

最后有一个经常被遗忘的简单原则有许多伪装:“如果有疑问就把它留下来”。或者“保持简单,愚蠢”。或YAGNI。在语言设计中,通常在功能方面越少越好。总而言之,Java设计得非常好,并且从这个角度经受住了时间的考验。