在方法体外的java类中进行字段初始化

snj*_*egi 1 java initialization

请解释下面的行为,为什么第一个语句有效而另一个语句无效并抛出错误.

public class Test{
    private String firstName="John";// is Valid
    //Below is invalid
    private String lastName; 
    lastname="Doe";
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

类只能包含声明(和静态/实例初始值设定项).字段声明可以包含一个初始值设定项,firstName并且您的声明lastName是有效的,但是它之后的赋值只是一个语句,并且一个类不能直接包含语句.

如果要将赋值与赋值分开,则需要将赋值放在构造函数中:

public class Test {
    private String lastName;

    public Test() {
        lastName = "Doe";
    }
}
Run Code Online (Sandbox Code Playgroud)

或使用实例初始化程序(根据我的经验不太常见):

public class Test {
    private String lastName;

    {
        lastName = "Doe";
    }
}
Run Code Online (Sandbox Code Playgroud)