Java: rekursiver Konstruktoraufruf und Stackoverflow-Fehler

Bitte helfen Sie zu verstehen, warum der folgende Code

public class HeapQn1 {

    /**
     * @param args
     */
    public HeapQn1() {
        new HeapQn1();
    }

    static HeapQn1 n = new HeapQn1();

    public static void main(String[] args) {

    }

}

Ergebnisse in

java.lang.StackOverflowError
    at com.rg.test.interview.HeapQn1.<init>(HeapQn1.java:8)
    at com.rg.test.interview.HeapQn1.<init>(HeapQn1.java:9)
    ...

ach meinem Verständnis findet die Speicherzuordnung für ein Objekt im Heapspeicher statt, und ich habe einen OutOfMemoryError erwartet, da der Heapspeicher aufgrund der wiederholten Objekterstellung irgendwann voll sein wir

ei der Recherche habe ich festgestellt, dass ein Java-Konstruktor als Methode betrachtet wird und den StackOverflowError erklärt, bis ich den folgenden Thread gelesen hab

Wann wird der Konstruktor in Java aufgerufen?

was sag

3. The object is fully constructed/created when the constructor returns.

Soweit ich das beurteilen konnte, ist der Konstruktor eine Methode, und da der Heapspeicher viel größer als der Stapelspeicher ist, führte der rekursive Konstruktoraufruf zu StackOverflowError. Ist das richtig

Da kein Objekt im give-Code vollständig erstellt wird, geschieht die Stapelrahmenzuordnung für den Konstruktor tatsächlich?

- edit-- Bei den Duplikaten verstehe ich, was StackoverflowError ist. Ich habe in der Frage "Nachforschungen haben ergeben, dass ein Java-Konstruktor eine Methode ist und den StackOverflowError erklärt". Meine Frage ist zu verstehen, ob ein Konstruktor einen Stapelrahmen erhält, der wie andere Methoden zugewiesen wird, da die Objekterstellung erst abgeschlossen ist, wenn der Konstruktor zurückkehrt. Hoffe das klärt.