Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java在初始化构造函数中的静态变量时不给出错误?_Java_Variables - Fatal编程技术网

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

为什么Java在初始化构造函数中的静态变量时不给出错误?,java,variables,Java,Variables,我知道静态变量对于所有实例都是通用的,而对于不同的变量,实例变量可能不同。但是,当我在构造函数中初始化静态变量时,对于不同的实例,静态变量可能不同。为什么Java在我这样做时不给我一个错误?如果在构造函数中初始化静态变量时它发生了变化,那么静态变量又有什么意义呢?在某些情况下,更新构造函数中静态变量的值是有意义的 我能想到的第一个例子是一个静态计数器变量,它统计为给定类创建的实例数。您应该在构造函数中递增该变量 public class SomeClass { private stati

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

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

我能想到的第一个例子是一个
静态
计数器变量,它统计为给定类创建的实例数。您应该在构造函数中递增该变量

public class SomeClass
{
    private static int instanceCounter = 0;

    public SomeClass()
    {
        ...
        instanceCounter++;
        ...
    }
}
另一个例子是
静态
变量的延迟初始化。您可能只想在初始化类的第一个实例时(即在构造函数内部)初始化
静态
变量

为什么Java在执行此操作时不给我一个错误

因为这不是一个Java错误。这可能是程序中的错误,但也可能正是所需的。编译器根本无法“知道”

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

当我在构造函数中初始化静态变量时,如果它发生了变化,那么静态变量有什么意义呢


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

一些单例模式用于初始化构造函数中的静态变量,我发现这是一个很好的解决这个问题的用例。“但是,当我在构造函数中初始化静态变量时,静态变量对于不同的实例可能是不同的。”-否,“不可能。”莱克索雷说can@adityabharadwaj具体是怎样的?@lexicore如果我有两个类车的对象,这些对象是玛莎拉蒂和本田。如果我有一个静态变量名为carColor,它在构造函数中被初始化为“red”。该变量对于玛莎拉蒂和本田都是相同的,但可以通过以下操作进行更改:-Maserati.carColor=“绿色”;现在,对象玛莎拉蒂的carColor静态变量为“绿色”,对象本田的carColor静态变量为“红色”。@adityabharadwaj如果答案对您有帮助,请单击勾号将其标记为已接受:)