示例1:
class Temp {
final int x = getX();
Temp() {
System.out.println("Via Constructor : " + this.x);
}
int getX() {
System.out.println("Via get method : " + this.x);
return 101;
}
public static void main(String[] args) {
new Temp();
}
}
输出:
via get method : 0
Via Constructor : 101
不清楚输出的第一行,因为最终变量无法重新初始化,它不应该显示默认值,请解释,我花了很多时间,但没有得到满意的答案。
示例2:
class Temp {
final int x;
Temp() {
System.out.println("Constructor one : " + this.x);
this.x = 10;
System.out.println("Constructor two : " + this.x);
}
public static void main(String[] args) {
new Temp();
}
}
输出:
Temp.java:5: error: variable x might not have been initialized
System.out.println("Constructor one : " + this.x);
[请比较两个示例,我对示例2感到满意,但是示例1对我来说并不明确。请帮助,将不胜感激。
声明
final int x = getX();
此处尚未将值分配给x。函数getX()
使用return语句进行赋值。如果尝试使用this.x
获得x的值,则在返回值之前,您当然会得到0。