Java 最终变量初始化

Java 最终变量初始化,java,constructor,initialization,final,Java,Constructor,Initialization,Final,我在类级别声明了两个final变量,但它们没有初始化。 因此,现在当我尝试为该类创建默认构造函数时,它给出了一个错误,即 空白的最终字段可能尚未初始化 为什么会发生这种错误?为什么需要在构造函数中初始化最终变量 我还有另一个问题,那就是,如果没有默认构造函数,是否不可能创建实例?即使我们有参数化的构造函数?最终变量是那些一旦对象初始化就不能更改的变量。所以你必须初始化最终变量。如果提供默认构造函数和参数化构造函数,则必须初始化这些变量,因为以后不能更改该值 为什么需要在构造函数中初始化最终变量

我在类级别声明了两个
final
变量,但它们没有初始化。
因此,现在当我尝试为该类创建默认构造函数时,它给出了一个错误,即
空白的最终字段可能尚未初始化

为什么会发生这种错误?为什么需要在构造函数中初始化最终变量


我还有另一个问题,那就是,如果没有默认构造函数,是否不可能创建实例?即使我们有参数化的构造函数?

最终变量
是那些一旦对象初始化就不能更改的变量。所以你必须初始化最终变量。如果提供默认构造函数和参数化构造函数,则必须初始化这些变量,因为以后不能更改该值

为什么需要在构造函数中初始化最终变量

必须在构造函数中初始化
final
字段,因为这是
final
定义的含义

如果调用一个构造函数,则不必在默认构造函数中设置
final
feilds,例如

class A {
   final int a;

   public A() {
       this(0);
   }

   public A(int a) {
       this.a = a;
   }
}
如果没有默认构造函数,是否无法创建实例

对。有很多方法可以做到这一点,最常见的方法是调用接受参数的构造函数

即使我们有参数化的构造函数


在这种情况下,如果您定义了一个构造函数,则只有一个构造函数不接受任何参数。

请参阅,您必须始终使用构造函数初始化最终字段。最终字段必须在对象实例化期间指定。不管构造函数如何-每个最终字段都必须指定一个值。@mlewandowski您不必使用构造函数-您可以直接为字段指定一个值或使用初始值设定项块(基本上是等效的)。