Java最终变量-显示两次初始化,请说明

问题描述 投票:1回答:1

示例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对我来说并不明确。请帮助,将不胜感激。

java variables final
1个回答
0
投票

声明

final int x = getX();

此处尚未将值分配给x。函数getX()使用return语句进行赋值。如果尝试使用this.x获得x的值,则在返回值之前,您当然会得到0。

© www.soinside.com 2019 - 2024. All rights reserved.