我有两个final
在类级别声明的变量,但它们没有被初始化。
因此,现在当我尝试为该类创建默认构造函数时,它给出了一个错误,说
The blank final field may not have been initialized
。最终变量初始化
为什么会发生此错误?为什么需要在构造函数中初始化最终变量?
我还有另一个查询,也就是说,不可能创建一个没有默认构造函数的实例吗?即使我们有参数化的构造函数?
我有两个final
在类级别声明的变量,但它们没有被初始化。
因此,现在当我尝试为该类创建默认构造函数时,它给出了一个错误,说
The blank final field may not have been initialized
。最终变量初始化
为什么会发生此错误?为什么需要在构造函数中初始化最终变量?
我还有另一个查询,也就是说,不可能创建一个没有默认构造函数的实例吗?即使我们有参数化的构造函数?
Final variable
是那些变量which can not be changed once object is initialized.
所以任何你将不得不初始化最终变量。如果您提供默认构造函数以及参数化consructor,则必须初始化这些变量,因为您以后不能更改该值。
为什么需要在构造函数中初始化最终变量?
A final
字段必须在构造函数中初始化,因为这是final
已定义的意思。
如果你调用一个构造函数,你不必在默认的构造函数中设置final
域。
class A {
final int a;
public A() {
this(0);
}
public A(int a) {
this.a = a;
}
}
是不可能没有默认构造函数创建一个实例?
是的。有很多方法可以做到这一点,通常是通过调用一个带参数的构造函数。
即使我们有参数化构造函数?
在这种情况下,您将只有一个构造函数,如果您定义一个构造函数,它将不带任何参数。
参考http://stackoverflow.com/questions/26935453/the-blank-final-field-initial-may-not-have-been-initialized – sasikumar
您必须始终用构造函数初始化最终字段。最终字段必须在对象实时期间分配。无论构造函数 - 每个最终字段都必须赋值。 – mlewandowski
@mlewandowski你不必使用构造函数来完成它 - 你可以直接为字段赋值或使用初始化块(基本上是相同的)。 –