Tim*_*Tim 11 java variables static final
我知道,一旦最终变量赋值给它,就无法更改.但是我对此有几个问题:
当我有一个字段,static final JButton button;在类外面说,然后在main方法中,尝试为它赋值button = new JButton("OK");,我收到错误告诉我删除最终修饰符?但是,由于原始button变量尚未引用对象,因此我可以将其分配一次?
其次,如果我完全删除了引用,button所以我只static final JButton button;在课外,我的IDE声称"空白的最终字段按钮可能尚未初始化." 这是否意味着必须初始化所有最终字段?如果是这样,他们必须在那里初始化然后我似乎无法在以后初始化它.
另外,愚蠢的问题,但我最初的假设是,当最终变量被引用到实例或数据类型时,它不能被分配给其他任何东西是正确的,对吗?
此代码不完整,但用于说明我的观点:
public class FinalVarTester {
static final JButton button;
public static void main(String[] args) {
JFrame frame = new JFrame();
Container container = frame.getContentPane();
container.setLayout(new BorderLayout());
button = new JButton("OK");
container.add(button, BorderLayout.SOUTH);
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*bin 18
您应该在静态初始化程序中或直接初始化静态最终变量.所以要么
static final JButton button = new JButton();
Run Code Online (Sandbox Code Playgroud)
要么
static final JButton button;
static {
button = new JButton();
}
Run Code Online (Sandbox Code Playgroud)
Java语言规范有更多关于它的文档:关于final变量的部分指定了为什么会出现编译错误:
如果分配了最终变量,则为编译时错误,除非在分配之前它是明确未分配的(第16段).
和第16章关于明确赋值会谈