Yar*_*evi 80 java static constructor final
public class A
{
private static final int x;
public A()
{
x = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
final 表示变量只能分配一次(在构造函数中).static 意味着它是一个类实例.我不明白为什么这是禁止的.这些关键字在哪里相互干扰?
ada*_*shr 175
每次创建类的实例时都将调用构造函数.因此,上面的代码意味着每次创建实例时都会重新初始化x的值.但是因为变量被声明为final(和static),所以你只能这样做
class A {
private static final int x;
static {
x = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果你删除静态,你可以这样做:
class A {
private final int x;
public A() {
x = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
或这个:
class A {
private final int x;
{
x = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
Sea*_*oyd 16
加载类时初始化静态最终变量.构造函数可以稍后调用,或者根本不调用.此外,构造函数将被多次调用(每个新对象),因此该字段不再是最终的.
如果需要自定义逻辑来初始化静态最终字段,请将其放在静态块中
想想第二次实例化对象时会发生什么.它试图将它设置为AGAIN,这是一个静态的决赛明确禁止的.它只能为整个类设置一次,而不是实例.
您应该在声明时设置该值
private static final x=5;
Run Code Online (Sandbox Code Playgroud)
如果您需要其他逻辑或更复杂的实例化,可以在静态初始化程序块中完成.