为什么Java中没有全局变量?[关闭]

IT小君   2021-12-07T07:45:21

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

评论(6)
IT小君

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

您的组件应该是自包含的,并且不需要任何全局状态。
相反,使用私有静态字段。

2021-12-07T07:45:21   回复
IT小君

您的问题的答案是,因为 Java 设计上不支持全局变量。Java 的设计考虑了面向对象的原则,因此,Java 中的每个变量要么是本地变量,要么是类的成员。

静态类成员是全局可访问的,这当然是全局变量的一种可能定义,这取决于您对该术语的解释。学究,虽然静态类成员可以通过类名访问,因此可以跨越多个范围,但它们仍然是类成员;因此并不是真正的全局变量。

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

2021-12-07T07:45:21   回复
IT小君

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

2021-12-07T07:45:21   回复
IT小君

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

2021-12-07T07:45:21   回复
IT小君

我们可以使用静态类来保存全局/应用程序变量,例如

//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);

   }
2021-12-07T07:45:22   回复
IT小君

合理的理由是,全局变量通常是一个坏主意,所以没有缺点让他们出来的语言。

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

最后,有一个经常被遗忘的简单原则,它以多种形式出现:“如果有疑问,请忽略它”。或“保持简单,愚蠢”。YAGNI在语言设计中,通常越少越好。总的来说,Java 的设计非常好,从这个角度来看,它经受住了时间的考验。

2021-12-07T07:45:22   回复