Maison >Java >javaDidacticiel >Clonage d'objets en Java

Clonage d'objets en Java

WBOY
WBOYoriginal
2024-08-30 16:04:50829parcourir

Étant l'un des langages de programmation les plus utilisés, Java est doté d'un large éventail de fonctionnalités et de fonctions. Un objet en Java est utilisé pour accomplir la tâche ; vous créez des objets, modifiez, déplacez, appelez leurs méthodes respectives, etc. Comme nous le savons tous, les références aux objets sont stockées en Java. Ainsi, lorsque nous avons deux références pointant vers le même objet, les changements chez l’un seront complètement reflétés dans les mêmes changements chez l’autre. Or, ce facteur peut ne pas jouer en notre faveur à chaque fois, le clonage est donc la solution pour empêcher de telles situations. En d'autres termes, créer une réplique exacte de tels objets est connu sous le nom de clonage d'objets en Java.

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Par définition, le clonage d'objets est le processus de création d'une copie exacte d'un objet original avec un état similaire. Lors du clonage, toutes les propriétés sont transférées à l'objet nouvellement cloné, mais ces propriétés peuvent être modifiées ou manipulées selon les besoins. La méthode clone() doit être définie dans la classe Object. Implémentation de java.lang.Une interface clonable est obligatoire pour la classe où nous avons l'intention de cloner l'objet. En cas d'échec de la mise en œuvre de l'interface Cloneable, une exception sera levée. Voyons maintenant la syntaxe du clonage d'objets.

Syntaxe :

protected Object clone() throws CloneNotSupportedException

Pour la classe Object, des opérations de clonage spécifiques sont effectuées par la méthode clone. Cette méthode créera une copie exacte de la classe et initialisera tous les champs avec le contenu des champs de l'objet. Si l'interface Cloneable n'est pas implémentée par la classe de l'objet mentionné, elle lancera « CloneNotSupportedException ». Tous les tableaux sont considérés comme implémentant l’interface Cloneable. Ici, l'interface Cloneable n'est pas implémentée sur la classe Object. Ainsi, lorsque nous appelons la méthode clone sur un objet, elle génère une erreur d'exécution.

Fonctionnement du clonage d'objets en Java

Comprenons maintenant le fonctionnement de la méthode clone() par démonstration.

Code :

class obj_clone implements Cloneable{
int phone_code;
String f_name;
obj_clone(int phone_code,String f_name){
this.phone_code=phone_code;
this.f_name=f_name;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public static void main(String args[]){
try{
obj_clone s1=new obj_clone(99,"sulaksh");
obj_clone s2=(obj_clone)s1.clone();
System.out.println(s1.phone_code+" "+s1.f_name);
System.out.println(s2.phone_code+" "+s2.f_name);
}catch(CloneNotSupportedException c){}
}
}

Explication du code : Comme vous pouvez le voir, nous avons initialisé notre classe et implémenté cloneable. Ici, il est vérifié si la classe réelle implémente le cloneable, avec clone() dans l'objet, puis elle procède à la création d'une copie. Ensuite, nous avons notre numéro de téléphone à deux variables avec le type de données entier et notre prénom avec le type de données chaîne. Nous avons ensuite créé un constructeur de notre classe obj_clone ainsi que les variables avec le mot-clé .this. Comme vous pouvez le voir, nous avons notre objet avec la méthode clone() et l'exception CloneNotSupportedException, dont nous avons discuté précédemment. De plus, super.clone() ici générera probablement l'erreur CloneNotSupportedException, que nous avons détectée plus tard.

Ensuite, nous avons notre classe principale et nous avons utilisé un try-catch pour tout ce qu'elle contient. Nous avons ensuite créé un objet de notre classe comme s1 et s2. Nous avons passé les deux paramètres pour s1, notre premier objet, puis nous avons implémenté la méthode clone() pour cloner s1 en s2. Enfin, nous avons deux instructions d'impression de sortie. Hors du bloc try, nous avons notre bloc catch à l’exception évoquée précédemment. Sur la 8ème ligne de l'exemple, nous avons implémenté le clone() comme mentionné et expliqué dans la partie syntaxe. Lors de l'exécution, le programme ci-dessus imprimera le résultat sous la forme « 99sulaksh 99sulaksh ». Pour la sortie, reportez-vous à la capture d'écran ci-jointe.

Sortie :

Clonage d'objets en Java

Types de clonage d'objets en Java

Maintenant que nous avons compris ce qu'est le clonage d'objets et comment il est effectué, comprenons quels sont les types de clonage pris en charge par Java.

  • Clonage superficiel : Chaque fois que la méthode de clonage par défaut est implémentée, un clonage superficiel se produit. Le clonage superficiel copie simplement tous les champs de l'objet dans la nouvelle instance. Le clonage superficiel est pris en charge par clone().
  • Clonage profond : Désormais, chaque fois que nous n'implémentons pas la méthode de clonage par défaut, nous pratiquons le clonage profond. Le clonage profond fonctionne selon nos besoins. Maintenant, la principale différence ici est que le clonage profond copie tous les champs ainsi que les valeurs de l'objet, tandis que le clonage superficiel ne copie que les champs.
  • Clonage paresseux : Il existe un troisième type de clonage pris en charge en Java, qui est une combinaison des deux types de clonage mentionnés ci-dessus ; c'est ce qu'on appelle le clonage paresseux. Et il n’y a pas de règle spécifique quant au moment d’utiliser quel type de clonage ; c'est à nous de décider selon nos besoins.

Avantages et inconvénients du clonage d'objets

Maintenant, comprenons les avantages et les inconvénients du clonage d'objets.

Avantages

Comprenant que tout ou chaque méthode a ses propres limites et fonctions, voici les avantages du clonage.

  • Cela permet de gagner du temps et du travail car le clonage est une méthode qui permet de gagner du temps ; vous n'êtes pas obligé d'écrire les mêmes codes longs.
  • Lors de la mise en œuvre sur des projets déjà développés, le clonage est la méthode la plus efficace pour copier des objets.
  • Il possède la méthode la plus rapide pour copier des tableaux avec Clone().

Inconvénients

Comme mentionné précédemment, chaque méthode a ses limites et ses fonctions, comprenons maintenant les inconvénients de Clone().

  • Pour que JVM comprenne que nous utiliserons clone(), nous devons implémenter l'interface Cloneable, même si cette interface clonable n'a aucune méthode.
  • Dans le cas du clonage profond, nous devrons remplacer object.clone(), car il prend essentiellement en charge le clonage superficiel.
  • Nous n'avons aucun contrôle sur la construction des objets, car clone() n'invoque aucun constructeur.
  • Fondamentalement, pour implémenter object.clone(), nous devons apporter pas mal de modifications à notre code, en commençant par l'implémentation de l'interface Cloneable, puis la définition de la méthode clone() jusqu'à la gestion de CloneNotSupportedException, etc.

Avec une bonne compréhension des avantages et des inconvénients de clone() ou de toute autre méthode, la mise en œuvre de méthodes et de fonctions aussi merveilleuses peut grandement bénéficier au programmeur.

Conclusion

Nous avons compris ce qu'est clone(), ses fonctionnalités et ses utilisations. Différence entre le clonage profond et superficiel, ainsi que le clonage paresseux. Le clonage superficiel copie uniquement les champs tandis que le clonage profond copie les champs et les valeurs et peut être implémenté selon les besoins. Alors que Lazy Copy est une combinaison des deux. Nous avons également compris les avantages et les inconvénients des clones ().

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!

Déclaration:
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
Article précédent:Interface de collecte en JavaArticle suivant:Interface de collecte en Java