为什么要在所有构造函数中显式初始化空白的最终变量?

拉朱:

我刚刚开始阅读Java。我感到困惑的一件事是,应在类的所有构造函数中初始化空白的最终变量。如果我有一个包含3个构造函数的类,并且在一个构造函数中初始化了一个空白的最终变量,为什么还要在其他两个构造函数中初始化相同的空白的最终变量呢?

他们是 :

必须在创建类的实例时(即在构造函数执行完成之后)初始化最终变量。

如果使用不初始化空白的final变量的构造函数之一创建该类的实例,则一旦构造函数的执行完成,就不会初始化final变量。

因此,所有构造函数都必须初始化空白的final变量。

假设所有构造函数都没有使用调用其他构造函数this()

JLS第16章。确定分配

每个局部变量(第14.4节)和每个空白的空白字段(第4.12.4节,第8.3.1.2节)在对其值进行任何访问时都必须具有明确分配的值。

如果使用未初始化空白的final字段的构造函数创建类的实例,则可以在分配该字段之前访问该字段。因此,编译器不允许这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

初始化的方法中的最终变量从类构造函数调用

来自分类Java

在Java中的构造函数之前初始化最终变量

来自分类Java

在另一个方法的构造函数中初始化最终变量

来自分类Dev

如果显式默认或删除了构造函数,为什么自C ++ 20起聚合初始化不再起作用?

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

显式初始化没有默认构造函数的成员

来自分类Dev

无法更改但需要在构造函数中初始化的C#变量

来自分类Dev

为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

来自分类Dev

为什么C和C ++编译器将显式初始化和默认初始化的全局变量放在不同的段中?

来自分类Dev

为什么Java不允许在构造函数中初始化静态最终变量(例如static final int d)?

来自分类Dev

在构造函数中初始化变量后进行验证:为什么不这样做呢?

来自分类Dev

为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

来自分类Dev

具有成员初始化列表的显式副本构造函数中的空值

来自分类Dev

显式构造函数和嵌套的初始化列表

来自分类Dev

为什么C#编译器强制在构造函数中显式初始化所有值类型的字段?

来自分类Dev

为什么派生类的构造函数要在C ++中初始化虚拟基类?

来自分类Dev

向量构造函数对:初始化列表与显式构造

来自分类Dev

为什么final可以在构造函数中初始化?

来自分类Dev

是否可以编写有助于复制初始化的显式构造函数?

来自分类Dev

如何避免在C ++中显式构造在初始化列表中继承的所有内容?

来自分类Dev

构造函数中的最终初始化错误

来自分类Dev

我是否需要在构造函数中显式初始化std :: unique_ptr?

来自分类Dev

为什么在函数内部的extern中提供显式的初始化程序不会覆盖extern?

来自分类Dev

为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

来自分类Dev

为什么在调用构造函数之前进行显式初始化

来自分类Dev

在没有构造函数的类中初始化变量

来自分类Dev

为什么要在并行构造之外初始化归约变量呢?

来自分类Dev

错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

Related 相关文章

  1. 1

    初始化的方法中的最终变量从类构造函数调用

  2. 2

    在Java中的构造函数之前初始化最终变量

  3. 3

    在另一个方法的构造函数中初始化最终变量

  4. 4

    如果显式默认或删除了构造函数,为什么自C ++ 20起聚合初始化不再起作用?

  5. 5

    为什么我们需要在MSIL中显式调用父构造函数?

  6. 6

    显式初始化没有默认构造函数的成员

  7. 7

    无法更改但需要在构造函数中初始化的C#变量

  8. 8

    为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

  9. 9

    为什么C和C ++编译器将显式初始化和默认初始化的全局变量放在不同的段中?

  10. 10

    为什么Java不允许在构造函数中初始化静态最终变量(例如static final int d)?

  11. 11

    在构造函数中初始化变量后进行验证:为什么不这样做呢?

  12. 12

    为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

  13. 13

    具有成员初始化列表的显式副本构造函数中的空值

  14. 14

    显式构造函数和嵌套的初始化列表

  15. 15

    为什么C#编译器强制在构造函数中显式初始化所有值类型的字段?

  16. 16

    为什么派生类的构造函数要在C ++中初始化虚拟基类?

  17. 17

    向量构造函数对:初始化列表与显式构造

  18. 18

    为什么final可以在构造函数中初始化?

  19. 19

    是否可以编写有助于复制初始化的显式构造函数?

  20. 20

    如何避免在C ++中显式构造在初始化列表中继承的所有内容?

  21. 21

    构造函数中的最终初始化错误

  22. 22

    我是否需要在构造函数中显式初始化std :: unique_ptr?

  23. 23

    为什么在函数内部的extern中提供显式的初始化程序不会覆盖extern?

  24. 24

    为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

  25. 25

    为什么在调用构造函数之前进行显式初始化

  26. 26

    在没有构造函数的类中初始化变量

  27. 27

    为什么要在并行构造之外初始化归约变量呢?

  28. 28

    错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

  29. 29

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

热门标签

归档