为了账号安全,请及时绑定邮箱和手机立即绑定

无法为最终变量“名称”赋值

无法为最终变量“名称”赋值

慕尼黑8549860 2021-10-27 10:09:11
为什么Java不允许我间接初始化最终变量?我不明白为什么它不应该工作,我的意思是该方法将始终运行,所以如果直接初始化或通过方法初始化有什么区别?此代码有效:package com.company;public class Person {    private final String name;    public Person() {        name = "bob";    }}这个没有。(即使我摆脱了 IO 代码并对分配给 name 的值进行了硬编码)package com.company;import java.util.Scanner;public class Person {    private final String name;    public Person() {        askName();    }    public void askName() {        Scanner scanner = new Scanner(System.in);        name = scanner.nextLine();    }}
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

您只能在 4 个位置为最终成员变量赋值:

  1. 在声明点

  2. 在构造函数中

  3. 在静态初始化块中(如果变量是静态的)

  4. 在初始化块中(如果变量不是静态的)


查看完整回答
反对 回复 2021-10-27
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

这是常识。您只能初始化最终变量一次。

构造函数只能被调用一次,因此,除非变量是静态的,否则可以在这里初始化。

但是你的方法可以被无限次调用,这会导致变量被重新引用,这正是 final 关键字应该避免发生的。


查看完整回答
反对 回复 2021-10-27
  • 3 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信