为什么Java在初始化构造函数中的静态变量时不给出错误?
我知道静态变量对于所有实例都是通用的,而对于不同的变量,实例变量可能不同。但是,当我在构造函数中初始化静态变量时,对于不同的实例,静态变量可能不同。为什么Java在我这样做时不给我一个错误?如果在构造函数中初始化静态变量时它发生了变化,那么静态变量又有什么意义呢?在某些情况下,更新构造函数中静态变量的值是有意义的 我能想到的第一个例子是一个为什么Java在初始化构造函数中的静态变量时不给出错误?,java,variables,Java,Variables,我知道静态变量对于所有实例都是通用的,而对于不同的变量,实例变量可能不同。但是,当我在构造函数中初始化静态变量时,对于不同的实例,静态变量可能不同。为什么Java在我这样做时不给我一个错误?如果在构造函数中初始化静态变量时它发生了变化,那么静态变量又有什么意义呢?在某些情况下,更新构造函数中静态变量的值是有意义的 我能想到的第一个例子是一个静态计数器变量,它统计为给定类创建的实例数。您应该在构造函数中递增该变量 public class SomeClass { private stati
静态
计数器变量,它统计为给定类创建的实例数。您应该在构造函数中递增该变量
public class SomeClass
{
private static int instanceCounter = 0;
public SomeClass()
{
...
instanceCounter++;
...
}
}
另一个例子是静态
变量的延迟初始化。您可能只想在初始化类的第一个实例时(即在构造函数内部)初始化静态
变量
为什么Java在执行此操作时不给我一个错误
因为这不是一个Java错误。这可能是程序中的错误,但也可能正是所需的。编译器根本无法“知道”
(对于非错误的东西,编译器说“错误”是一个非常糟糕的主意。它只会鼓励人们关闭错误/警告消息。)
当我在构造函数中初始化静态变量时,如果它发生了变化,那么静态变量有什么意义呢
静态变量可以用于各种事情,其中一些包括全局计数器(参见@Eran的示例)或“最新”值或状态更改。其中任何一个都可以在构造函数中更新 一些单例模式用于初始化构造函数中的静态变量,我发现这是一个很好的解决这个问题的用例。“但是,当我在构造函数中初始化静态变量时,静态变量对于不同的实例可能是不同的。”-否,“不可能。”莱克索雷说can@adityabharadwaj具体是怎样的?@lexicore如果我有两个类车的对象,这些对象是玛莎拉蒂和本田。如果我有一个静态变量名为carColor,它在构造函数中被初始化为“red”。该变量对于玛莎拉蒂和本田都是相同的,但可以通过以下操作进行更改:-Maserati.carColor=“绿色”;现在,对象玛莎拉蒂的carColor静态变量为“绿色”,对象本田的carColor静态变量为“红色”。@adityabharadwaj如果答案对您有帮助,请单击勾号将其标记为已接受:)