gpt4 book ai didi

Java - 最终变量

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:06 24 4
gpt4 key购买 nike

我知道一旦 final 变量被赋值,它就不能再改变了。但是我对此有几个问题:

  • 当我有一个字段时,在类外说 static final JButton button;,然后在 main 方法中,尝试为其赋值, button = new JButton("OK");,我收到一条错误消息,告诉我删除 final 修饰符?然而,由于原始的 button 变量还没有引用一个对象,我的印象是我可以给它赋值一次?

  • 其次,如果我完全删除对 button 的引用,所以我只有 static final JButton button; 在类外,我的 IDE 会声明“The blank final字段按钮可能尚未初始化。”这是否意味着所有最终字段必须被初始化?如果是这样,它们是否必须在那里初始化,因为我似乎无法稍后对其进行初始化。

  • 另外,这是一个愚蠢的问题,但我最初的假设是,当 final 变量被引用到一个实例或数据类型时,它不能被分配给任何其他东西是正确的,对吧?

此代码并不完整,但用于说明我的观点:

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);
}

}

最佳答案

您应该在静态初始化程序中或直接初始化静态最终变量。所以要么

static final JButton button = new JButton();

static final JButton button;

static {
button = new JButton();
}

Java 语言规范有更多关于它的文档:section about final variables指定出现编译错误的原因:

It is a compile-time error if a final variable is assigned to unless it is definitely unassigned (§16) immediately prior to the assignment.

chapter 16谈明确赋值

关于Java - 最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10259547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com