Maison > Java > javaDidacticiel > le corps du texte

Appel de constructeur récursif en Java

WBOY
Libérer: 2023-08-27 15:41:07
avant
1400 Les gens l'ont consulté

Appel de constructeur récursif en Java

L'appel récursif du constructeur est une erreur de compilation qui se produit lorsqu'un constructeur s'appelle lui-même. C'est similaire à la récursivité, où une méthode s'appelle autant de fois que nécessaire. Une méthode qui s’appelle elle-même est appelée méthode récursive, et un constructeur qui s’appelle est appelé constructeur récursif.

Dans cet article, nous découvrirons les erreurs d'appel récursif des constructeurs en Java avec quelques exemples.

Appel de constructeur récursif

Constructeur

C'est très similaire aux méthodes, mais la différence est que les méthodes définissent le comportement des objets, tandis que les constructeurs sont utilisés pour initialiser ces objets. Nous pouvons donner à la méthode le nom de notre choix, mais le constructeur doit être le même que le nom de la classe. De plus, les méthodes peuvent renvoyer une valeur, mais les constructeurs ne renvoient aucune valeur car ils ne peuvent avoir aucun type de retour.

Lorsque l'utilisateur ne crée aucun constructeur, le compilateur Java crée automatiquement un constructeur (nous l'appelons le constructeur par défaut).

Exemple 1

public class Cnst { // class name
   Cnst() { 
     // constructor 
     System.out.println("I am constructor");
   }
   public static void main(String[] args) {
     Cnst obj = new Cnst();  
     // calling the Constructor
   }
}
Copier après la connexion

Sortie

I am constructor
Copier après la connexion

Malgré les similitudes entre les constructeurs et les méthodes, Java n'autorise pas les constructeurs récursifs. C'est une mauvaise pratique de programmation.

Exemple 2

L'exemple suivant illustre une erreur d'appel récursif du constructeur.

Ici, nous allons créer une classe et définir son constructeur et deux paramètres. Nous appellerons ensuite le même constructeur à l’intérieur de son corps.

public class Cart {
   String item;
   double price;
   Cart(String item, int price) { // constructor
     this(item, price); // constructor is calling itself
	// this keyword shows these variables belong to constructor
     this.item = item; 
     this.price = price;
   }
   public static void main(String[] args) {
     Cart obj = new Cart("Bread", 15); // creating object
     System.out.println("Constructor calling another Constructor");
   }
}
Copier après la connexion

Sortie

Cart.java:4: error: recursive constructor invocation
Cart(String item, int price) { // constructor
   ^
1 error
Copier après la connexion
La traduction chinoise de

Exemple 3

est :

Exemple 3

Dans l'exemple suivant, nous allons essayer de définir un objet à l'intérieur du constructeur pour vérifier si Java autorise la création d'objets à l'intérieur du constructeur.

public class Cart {
   String item;
   double price;
   Cart(String item, int price) { 
   // constructor
	// this keyword shows these variables belong to constructor
     this.item = item; 
     this.price = price;
     Cart obj2 = new Cart("Milk", 55); 
     // creating object
   }
   public static void main(String[] args) {
     Cart obj1 = new Cart("Bread", 15); 
     // creating another object
     System.out.println("Constructor calling another Constructor");
   }
}
Copier après la connexion

Sortie

Exception in thread "main" java.lang.StackOverflowError
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
Copier après la connexion

Nous obtenons une StackOverflowError car la création d'un objet à l'intérieur d'un constructeur entraîne une boucle infinie de création d'objet.

La traduction chinoise de

Exemple 4

est :

Exemple 4

L'exemple suivant démontre qu'il est légal d'appeler un constructeur au sein d'un autre constructeur.

public class Cart { 
   // class
   String item;
   double price;
   Cart(String item, int price) { 
   // first constructor
	// this keyword shows these variables belong to constructor
     this.item = item; 
     this.price = price;
   }
   public Cart (int price) { 
   // second constructor
     this(null, price); 
     // calling the 1st constructor
   }
   public static void main(String[] args) {
     Cart obj = new Cart(15); 
     // creating object
     System.out.println("Constructor calling another Constructor");
   }
}
Copier après la connexion

Sortie

Constructor calling another Constructor
Copier après la connexion

Conclusion

Java ne permet pas la récursivité des constructeurs, cette pratique de programmation est donc évidemment à éviter. Dans cet article, nous essayons d'expliquer les constructeurs récursifs, en commençant par une discussion sur les constructeurs. De plus, nous avons trouvé une autre erreur appelée StackOverflowError qui était due à une boucle infinie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!