我读了两件事
-
final
应在声明期间初始化 - 否则,它将被视为应该在构造函数的最后一行分配的
blank final variable
否则,你会得到CTE
.
我的问题是,
为什么Java允许在构造函数中分配/初始化final的值?
因为每个实例都可以有自己的final
值。这只能通过构造函数来完成,因为您只能调用构造函数一次。如果要确保块只执行一次,并且在创建实例时也执行一次,则构造函数是唯一的地方。
如果您在类中进行硬编码(在声明时初始化(,则所有实例都将相同,并且几乎变为静态。