【发布时间】:2015-09-07 23:34:36
【问题描述】:
我有三个常量浮点数,我想在类的构造函数中分配它们的值。
我在构造函数之前声明了所有三个常量。作为一个实验,我为每个设置了不同的修饰符:
public static float defaultdim;
public static final float maxdim;
public final float mindim;
我的 IDE Eclipse 检测到第二个常量 maxdim 的错误,即:
空白的最终字段 maxdim 可能尚未初始化
让我感到困惑的不是为什么会出现错误,而是为什么在 mindim 的情况下没有出现错误,这也是 final,考虑到错误消息与变量是 final 的事实有关。换句话说,存在错误是因为在声明期间未初始化最终变量。两个变量都是final的,都没有初始化,但是只有一种情况会出现错误。
这两个变量因修饰符 static 而不同,这表明这将是错误的原因。但是,我不明白为什么会出现这种情况,因为在 defaultdim 的情况下没有出现错误,这只是静态的,而不是最终的,并且错误本身并不涉及修饰符 static。谁能给我解释一下背后的原因?
【问题讨论】:
-
你能在这个类的构造函数中显示代码吗?
-
你在烦我吗?
static finalvar 的声明必须有一个初始值,所以你会得到这个错误。 -
"我有三个常量浮点数,我想在类的构造函数中分配它们的值。"这是一个矛盾。你知道什么是常数吗?
-
@xehpuk 这句话并不矛盾——它描述了我想要的,因为这就是我想要的,所以它是真实的,并不矛盾。现在,我想在构造函数中为它们赋值的原因是因为它们基于传递给构造函数的参数。我也认识到它们应该是最终的,因为从分配开始它们的值不会改变(是的,我确实知道常量的含义)而且我也承认它们应该是静态的 - 因为它们将由给定类的所有实例共享。如果您能告诉我如何解决此问题,我将不胜感激。
-
如果你在构造函数中赋值,那么它们就不是常量。
标签: java static initialization final