我知道静态变量对于所有实例都是通用的,并且实例变量对于不同的变量可以是不同的。但是,当我在构造函数中初始化静态变量时,静态变量对于不同的实例可能是不同的。为什么当我这样做时Java没有给我一个错误?如果静态变量在构造函数中初始化时它的变化是什么?
答案 0 :(得分:4)
在某些情况下,更新构造函数中静态变量的值是有意义的。
我能想到的第一个例子是static
计数器变量,它计算为给定类创建的实例数。你可以在构造函数中增加该变量。
public class SomeClass
{
private static int instanceCounter = 0;
public SomeClass()
{
...
instanceCounter++;
...
}
}
另一个例子是static
变量的延迟初始化。您可能只想在初始化类的第一个实例时(这意味着在构造函数中)初始化static
变量。
答案 1 :(得分:1)
为什么当我这样做时,Java没有给我一个错误?
因为它不是Java错误。这可能是你的程序中的错误,但它也可能正是所需要的。编译器根本无法知道"。
(编译器说"错误"对于非错误的东西是一个非常糟糕的主意。它只鼓励人们关闭错误/警告消息。)
如果静态变量在构造函数中初始化时发生变化,那么它的重点是什么?
静态变量可用于各种事物,其中一些包括全局计数器(参见@Eran的例子)或"最近的"值或状态变化。其中任何一个都可以在构造函数中更新。