Haben Java Final-Variablen Standardwerte?

Ich habe ein Programm wie dieses:

class Test {

    final int x;

    {
        printX();
    }

    Test() {
        System.out.println("const called");
    }

    void printX() {
        System.out.println("Here x is " + x);
    }

    public static void main(String[] args) {
        Test t = new Test();
    }

}

Wenn ich versuche, es auszuführen, erhalte ich Compiler-Fehler als:variable x might not have been initialized basierend auf Java-Standardwerten sollte ich die folgende Ausgabe richtig bekommen?

"Here x is 0".

Werden endgültige Variablen Standardwerte haben?

wenn ich meinen Code so ändere,

class Test {

    final int x;

    {
        printX();
        x = 7;
        printX();
    }

    Test() {
        System.out.println("const called");
    }

    void printX() {
        System.out.println("Here x is " + x);
    }

    public static void main(String[] args) {
        Test t = new Test();
    }

}

Ich erhalte die Ausgabe als:

Here x is 0                                                                                      
Here x is 7                                                                                     
const called

Kann mir jemand bitte dieses Verhalten erklären ..

Antworten auf die Frage(8)

Ihre Antwort auf die Frage