Qu'est-ce que le clonage en Java et ses types?

Cet article sur le clonage en Java vous donnera des informations détaillées sur le processus de clonage et les différents types de clonage pris en charge par Java.

Lors de la programmation, nous rencontrons souvent des scénarios dans lesquels nous devons réutiliser un morceau de code complet. La réécriture du code rend le programme volumineux, tout en diminuant l'efficacité du programme. Ainsi, Java nous offre une excellente fonctionnalité qui sauve de cette tâche fastidieuse. Ceci est connu sous le nom de clonage en Java et à travers cet article, je vais vous donner un aperçu complet de celui-ci.



Voici les sujets dont je vais parler dans cet article:



Clonage en Java

Le clonage d'objets en Java consiste à créer une copie exacte de l'objet d'origine. En d'autres termes, c'est une manière de créer un nouvel objet en copiant toutes les données et attributs de l'objet d'origine. Ceci n'est possible qu'en implémentant la méthode clone () du java.lang.Object classe. La méthode clone crée une copie exacte d'un objet pour lequel elle a été invoqué dans un ordre d'affectation champ par champ et renverra la nouvelle référence d'objet . Une chose dont vous devez vous souvenir, en Java, les objets qui implémentent l'interface de clone qui est une interface de marqueur sont autorisés à utiliser le clone ().

tableau d'objets de classe java

Maintenant que vous savez ce qu'est le clonage en Java, voyons les différents avantages de l'utilisation de cette fonctionnalité.



Avantages du clonage en Java

Ci-dessous, j'ai répertorié quelques-unes des fonctionnalités les plus intrigantes de l'utilisation du clonage en Java.

  • Aide à réduire les lignes de code.
  • Le moyen le plus efficace de copier objets.
  • En outre, le clone () est considéré comme la méthode la plus rapide pour copier un tableau.

Remarque: bien que l'utilisation du clonage puisse entraîner des problèmes de conception, mais si vous l'utilisez de manière stratégique appropriée, cela peut vous être bénéfique.

Types de clonage en Java

Le clonage en Java peut être groupé en deux catégories:



  1. Clonage superficiel
  2. Clonage profond

Comprenons chacun d’entre eux un par un.

Clonage superficiel

En Java, lorsque le processus de clonage est effectué en invoquant la méthode clone (), il s'appelle Shallow Cloning. Il s'agit du processus de clonage par défaut en Java où une copie superficielle de l'objet d'origine sera créée avec le champ exact. Dans le cas où l'objet d'origine a des références à certains autres objets en tant que champs, seules les références de cet objet seront clonées au lieu de la création d'un nouvel objet. En d'autres termes, si vous modifiez la valeur des objets clonés, elle sera également reflétée dans l'original. Ainsi, le clonage superficiel dépend de l'objet d'origine.

copie superficielle - Clonage en Java - EdurekaCi-dessous, j'ai donné l'exemple de la même chose:

package edureka class EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} classe EduLearner implémente Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Version par défaut de la méthode clone () protected Object clone () throws CloneNotSupportedException {return .clone ()}} classe publique ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner Learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner Learner2 = null try {// Créer un clone de Learner1 et l'attribuer à Learner2 Learner2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Impression des détails de Learner1 System.out.p rintln ('Détails de l'apprenant 2:') System.out.println ('Id:' + Learner1.eduId) System.out.println ('Nom:' + Learner1.learnerName) System.out.println ('Id cours: '+ Learner1.eduCourse) // Impression de tous les cours de' Learner1 'System.out.println (' Cours de l'apprenant 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1. eduCourse.course2) System.out.println (Learner1.eduCourse.course3) // Détails d'impression de Learner2 System.out.println ('Détails de l'apprenant 2:') System.out.println ('Id:' + Learner2.eduId ) System.out.println ('Name:' + Learner2.learnerName) System.out.println ('Course Id:' + Learner2.eduCourse) // Impression de tous les cours de 'Learner2' System.out.println ('Courses of Learner 2: ') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Changer le cours3 de' Learner2 'Learner2.eduCourse.course3 =' JSP '// Cette modification sera reflétée dans l'original' Learner1 'System.out.println (' Cours mis à jour de l'apprenant 2: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse.course3)}}

Production:

Détails de l'apprenant 2: Id: 2811 Nom: Max ID du cours: EduCourse @ 15db9742 Cours de l'apprenant 1: Java Spring Microservices Détails de l'apprenant 2: Id: 2811 Nom: Max ID du cours: EduCourse @ 15db9742 Cours de l'apprenant 2: Java Spring Microservices Cours mis à jour de Learner 2: Java Spring JSP

Clonage profond en Java

En Java, lorsque le processus de clonage est effectué en implémentant l'interface clonable, il s'appelle Deep Cloning. Dans ce type de clonage, une copie exacte de tous les champs de l'objet d'origine sera créée. Mais dans le cas où l'objet d'origine a des références à d'autres objets en tant que champs, une copie de ces objets sera également créée en appelant la méthode clone (). Cela rend l’objet cloné indépendant de l’objet original et les modifications apportées à l’un des objets ne seront pas répercutées sur l’autre.

qu'est-ce que l'écho en php

Ci-dessous, j'ai donné l'exemple de la même chose:

package edureka class EduCourse implements Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} protected Object clone () throws CloneNotSupportedException { return super.clone ()}} classe EduLearner implémente Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduC = eduCourse} // La substitution de la méthode clone () pour créer une copie complète d'un objet protégé Object clone () lève CloneNotSupportedException {EduLearner Learner = (EduLearner) super.clone () Learner.eduCourse = (EduCourse) eduCourse.clone () return Learner}} classe publique DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner Learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = null try {// Création d'un clone de Learner1 et l'assignation à Learner2 Learner2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Impression des détails de Learner1 System.out. println ('Détails de l'apprenant 2:') System.out.println ('Id:' + Learner1.eduId) System.out.println ('Nom:' + Learner1.learnerName) System.out.println ('Id cours: '+ Learner1.eduCourse) // Impression de tous les cours de' Learner1 'System.out.println (' Cours de l'apprenant 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1. eduCourse.course2) System.out.println (Learner1.eduCourse.course3) // Détails d'impression de Learner2 System.out.println ('Détails de l'apprenant 2:') System.out.println ('Id:' + Learner2.eduId ) System.out.println ('Name:' + Learner2.learnerName) System.out.println ('Course Id:' + Learner2.eduCourse) // Impression de tous les cours de 'Learner2' System.out.println ('Courses de l'apprenant 2: ') System.out.println (Learner2.eduCourse.course1) System.out.printl n (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Changement du cours3 de 'Learner2' Learner2.eduCourse.course3 = 'JSP' // Ce changement ne sera pas reflété dans l'original ' Learner1 'System.out.println (' Cours de l'apprenant 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse. cours3) // Cours mis à jour de l'apprenant2 System.out.println ('Cours de l'apprenant 2:') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out. println (apprenant2.eduCourse.course3)}}

Production:

Détails de l'apprenant 2: Id: 2811 Nom: Max ID de cours: edureka.EduCourse@15db9742 Cours de l'apprenant 1: Java Spring Microservices Détails de l'apprenant 2: Id: 2811 Nom: Max Id de cours: edureka.EduCourse@6d06d69c Cours de l'apprenant 2 : Cours Java Spring Microservices de l'apprenant 1: Cours Java Spring Microservices de l'apprenant 2: Java Spring JSP

Cela nous amène à la fin de cet article sur le clonage en Java. Si vous souhaitez en savoir plus sur Java, vous pouvez consulter notre .

python qu'est-ce que __init__

Maintenant que vous avez compris ce qu'est un clonage en Java, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate & Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de cet article «Clonage en Java» et nous vous répondrons dans les plus brefs délais.