Rekursiver Konstruktoraufruf in Java
Der Vorgang, bei dem sich eine Funktion direkt oder indirekt selbst aufruft, heißt Rekursion und die entsprechende Funktion heißt rekursive Funktion . Im rekursiven Programm wird die Lösung für den Basisfall bereitgestellt und die Lösung des größeren Problems wird in kleineren Problemen ausgedrückt. Hier rekursiver Konstruktoraufruf und Stapelüberlauffehler in Java. Es ist wie unten im Beispiel wie folgt dargestellt:
Beispiel
Java
// Java Program to Illustrate Recursion // Main class public class GFG { static int count = 0; // Method 1 // Recursive method static void function() { count = count + 1; if (count <= 5) { System.out.println("Call " + count); function(); } } // Method 2 // Main driver method public static void main(String[] args) { function(); } }
Anruf 1 Anruf 2 Anruf 3 Anruf 4 Anruf 5
Rekursiver Konstruktoraufruf
Ruft sich ein Konstruktor selbst auf, dann kommt die Fehlermeldung „rekursiver Konstruktoraufruf“. Das folgende Programm wird vom Compiler nicht zugelassen, da wir innerhalb des Konstruktors versucht haben, denselben Konstruktor aufzurufen. Der Compiler erkennt es sofort und gibt einen Fehler aus.
Beispiel:
Java
// Java program to Illustrate How Recursive // Constructor Invocation Error is Occured // Main class class GFG { // Constructor of this class // Inside we are trying to call the same constructor GFG() { // This keyword refers to same instance itself this(); } // Main driver method public static void main(String[] args) { // Creating an object of class inside main() GFG obj = new GFG(); } }
Ausgabe:
Lassen Sie uns nun besprechen, worauf wir uns bei einem Stapelüberlauffehler genau beziehen und warum er auftritt . Ein Stapelüberlauffehler tritt auf, wenn wir unserer rekursiven Funktion oder Vorlage nicht die richtige Beendigungsbedingung zuweisen, was bedeutet, dass sie sich in eine Endlosschleife verwandelt.
Implementierung:
Hier haben wir ein GFG-Objekt innerhalb des Konstruktors erstellt, das durch Aufrufen des Konstruktors initialisiert wird, der dann ein weiteres GFG-Objekt erstellt, das erneut durch Aufrufen des Konstruktors initialisiert wird und so lange weiterläuft, bis der Stapel überläuft. Dies lässt sich anhand der Abbildung wie folgt begründen:
Beispiel:
Java
// Java program to Illustrate Stack Overflow Error // Main class public class GFG { // Constructor of this class GFG() { // Creating an object of GFG class inside the // constructor which is initialized by calling the // constructor, which is initialized by // calling the constructor and it goes on GFG obj1 = new GFG(); } // Main driver method public static void main(String[] args) { // Creating an object of this class GFG obj = new GFG(); } }
Ausgabe: