为什么必须在构造函数完成之前初始化最终变量?


问题内容

为什么必须在构造函数完成之前初始化最终变量?

public class Ex
{
  final int q;
}

当我编译这段代码时,我得到这样的错误

err:变量q可能尚未初始化


问题答案:

官方理由是,它是由定义的Java语言规范8.3.1.2:

必须在声明该类的每个构造函数的末尾绝对分配一个空白的最终实例变量;否则会发生编译时错误。

空白的final是其声明缺少初始化程序(即您所描述的内容)的final变量。