为什么Java中没有全局变量?
为什么Java中没有全局变量?
全局变量通常是设计缺陷。
您的组件应该是自包含的,不应需要任何全局状态。
取而代之的是,请使用私有静态字段。
static
提供了这种功能。 - Teja KantamneniSystem.out
怎么可能不是全局变量呢?如果我们采用维基百科的定义,那么很明显Java确实有全局变量,因此这个问题无法回答,因为它基于错误的假设。 - Ingoout
仅在 System
上下文中可访问,因此它不是全局变量,并且 System
本身也不是一个变量。因此, System.out
不是全局变量。维基百科还表示,Java没有显式的全局变量。如果你读到了其他任何内容,那就是不正确的。 - user207421System.out
指的是 java.lang.System
类上的类型为 PrintStream
的静态字段 out
。当这个答案特别提到 静态类成员
时,它确切地指的就是这个。 - M. Justin实际上,系统属性与全局变量有一定的相似之处 - 您可以在一个类中设置它们,在另一个类中读取它们。这在相当复杂的企业环境中非常常见。例如,JBoss通常提供一种定义和访问系统属性的机制。
我们可以使用静态类来保存全局/应用程序变量 例如
//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);
}
理性的原因是全局变量通常不是一个好主意,所以在语言中不包含它们没有任何缺点。
然后有一个实际的语法原因:根据语法,Java 中的所有内容都需要在类的范围内定义。因此,你不能真正地将命名变量放在“全局”位置,而不改变 Java 的作用域规则。可以说,在语法中 Java 允许的最接近“全局”的东西是类的“public static”成员,它可以在许多方面像全局变量一样使用。
最后,还有一个经常被忽视的简单原则,它有许多形式:“如果不确定就不要加入”。或者“保持简单,傻瓜”。或者YAGNI。在语言设计中,功能越少通常越好。总的来说,从这个角度来看,Java 设计得非常好,经受住了时间的考验。