为什么Java在构造函数中初始化静态变量时不会出错?

时间:2018-03-04 06:57:40

标签: java variables

我知道静态变量对于所有实例都是通用的,并且实例变量对于不同的变量可以是不同的。但是,当我在构造函数中初始化静态变量时,静态变量对于不同的实例可能是不同的。为什么当我这样做时Java没有给我一个错误?如果静态变量在构造函数中初始化时它的变化是什么?

2 个答案:

答案 0 :(得分:4)

在某些情况下,更新构造函数中静态变量的值是有意义的。

我能想到的第一个例子是static计数器变量,它计算为给定类创建的实例数。你可以在构造函数中增加该变量。

public class SomeClass
{
    private static int instanceCounter = 0;

    public SomeClass()
    {
        ...
        instanceCounter++;
        ...
    }
}

另一个例子是static变量的延迟初始化。您可能只想在初始化类的第一个实例时(这意味着在构造函数中)初始化static变量。

答案 1 :(得分:1)

  

为什么当我这样做时,Java没有给我一个错误?

因为它不是Java错误。这可能是你的程序中的错误,但它也可能正是所需要的。编译器根本无法知道"。

(编译器说"错误"对于非错误的东西是一个非常糟糕的主意。它只鼓励人们关闭错误/警告消息。)

  

如果静态变量在构造函数中初始化时发生变化,那么它的重点是什么?

静态变量可用于各种事物,其中一些包括全局计数器(参见@Eran的例子)或"最近的"值或状态变化。其中任何一个都可以在构造函数中更新。