猿问

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

为什么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();

    }

}


慕尼黑8549860
浏览 131回答 3
3回答

呼如林

您只能在 4 个位置为最终成员变量赋值:在声明点在构造函数中在静态初始化块中(如果变量是静态的)在初始化块中(如果变量不是静态的)

慕田峪9158850

这是常识。您只能初始化最终变量一次。构造函数只能被调用一次,因此,除非变量是静态的,否则可以在这里初始化。但是你的方法可以被无限次调用,这会导致变量被重新引用,这正是 final 关键字应该避免发生的。
随时随地看视频慕课网APP

相关分类

Java
我要回答