【问题标题】:Final variable initialization [duplicate]最终变量初始化
【发布时间】:2016-02-26 10:42:33
【问题描述】:

我在类级别声明了两个 final 变量,但它们没有被初始化。
所以,现在当我尝试为该类创建默认构造函数时,它会给出错误提示
The blank final field may not have been initialized

为什么会出现这个错误?为什么需要在构造函数中初始化最终变量?

我还有另一个查询,那就是,没有默认构造函数就不能创建实例吗?即使我们有参数化的构造函数?

【问题讨论】:

  • 您必须始终使用构造函数初始化最终字段。必须在对象实例化期间分配最终字段。无论构造函数如何 - 每个最终字段都必须分配一个值。
  • @mlewandowski 您不必使用构造函数来执行此操作 - 您可以直接为字段分配值或使用初始化程序块(基本上是等效的)。

标签: java constructor initialization final


【解决方案1】:

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

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

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

class A {
   final int a;

   public A() {
       this(0);
   }

   public A(int a) {
       this.a = a;
   }
}

没有默认构造函数就不能创建实例吗?

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

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

在这种情况下,你将只有一个构造函数,如果你定义了一个不带参数的构造函数。

【讨论】:

    【解决方案2】:

    Final variable 是那些变量which can not be changed once object is initialized. 所以无论你如何初始化最终变量。如果您提供默认构造函数以及参数化构造函数,则必须初始化这些变量,因为以后无法更改值。

    【讨论】:

      猜你喜欢
      • 2019-07-12
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      相关资源
      最近更新 更多