Ce este clonarea în Java și tipurile sale?



Acest articol despre Clonarea în Java vă va oferi informații detaliate despre procesul de clonare și diferitele tipuri de clonare acceptate de Java.

În timp ce programăm, de multe ori întâlnim scenarii în care trebuie să refolosim o bucată completă de cod. Rescrierea codului face ca programul să fie voluminos, în timp ce scade eficiența programului. Astfel, Java ne oferă o caracteristică excelentă care salvează din această sarcină împovărătoare. Aceasta este cunoscută sub numele de Clonare în Java și, prin intermediul acestui articol, vă voi oferi informații complete despre aceasta.

Mai jos sunt subiectele pe care le voi discuta în acest articol:





Clonarea în Java

Clonarea obiectelor în Java este procesul de creare a unei copii exacte a obiectului original. Cu alte cuvinte, este un mod de a crea un obiect nou prin copierea tuturor datelor și atributelor din obiectul original. Acest lucru este posibil doar prin implementarea metodei clone () a java.lang.Object clasă. Metoda clonării creează o copie exactă a unui obiect pentru care a fostinvocat într-o ordine de atribuire câmp cu câmp și va returna noul obiect de referință . Un lucru pe care trebuie să-l amintiți, în Java, obiectelor care implementează interfața de clonare care este o interfață de marker este permis să folosească clona ().

Acum, că sunteți conștienți de ceea ce este clonarea în Java, să vedem diferite avantaje ale utilizării acestei caracteristici.



Avantajele clonării în Java

Mai jos am enumerat câteva dintre cele mai interesante caracteristici ale utilizării clonării în Java.

  • Ajută la reducerea liniilor de cod.
  • Cel mai eficient și eficient mod de copiereobiecte.
  • De asemenea, clona () este considerată a fi cea mai rapidă metodă de copiere a unei matrice.

Notă: Deși utilizarea clonării poate duce la unele probleme de proiectare, dar dacă o utilizați într-un mod strategic adecvat, vă poate aduce beneficii.

Tipuri de clonare în Java

Clonarea în Java poate fi grupatăîn două categorii:



  1. Clonare superficială
  2. Clonare profundă

Să le înțelegem pe fiecare dintre ele unul câte unul.

suprascrierea și supraîncărcarea în Java

Clonare superficială

În Java, când procesul de clonare se face prin invocarea metodei clone () se numește Clonare superficială. Este procesul implicit de clonare în Java în care va fi creată o copie superficială a obiectului original cu câmp exact. În cazul în care obiectul original are referințe la alte obiecte ca câmpuri, atunci numai referințele acelui obiect vor fi clonate în loc de crearea unui nou obiect. Cu alte cuvinte, dacă modificați valoarea obiectelor clonate, aceasta va fi reflectată și în original. Astfel, clonarea superficială depinde de obiectul original.

copie superficială - Clonarea în Java - EdurekaMai jos am dat exemplul aceluiași:

pachet edureka clasa EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} class EduLearner implements Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Versiunea implicită a metodei clone () protejate Object clone () aruncă CloneNotSupportedException .clone ()}} public class ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = EduCourse new ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// Crearea unei clone de cursant1 și atribuirea acesteia către cursant2 cursant2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Tipărirea detaliilor cursantului1 System.out.p rintln ('Detalii ale cursantului 2:') System.out.println ('Id:' + learnner1.eduId) System.out.println ('Nume:' + learnner1.learnerName) System.out.println ('ID curs: '+ learnner1.eduCourse) // Tipărirea tuturor cursurilor de' learnner1 'System.out.println (' Cursuri ale cursantului 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (cursant1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Tipărirea detaliilor Learner2 System.out.println („Detalii Learner 2:”) System.out.println („Id:” + learnner2.eduId ) System.out.println ('Nume:' + learnner2.learnerName) System.out.println ('Id-ul cursului:' + learnner2.eduCourse) // Tipărirea tuturor cursurilor de 'learnner2' System.out.println ('Cursuri of Learner 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Schimbarea cursului3 din' Learner2 'learner2.eduCourse.course3 =' JSP '// Această modificare va fi reflectată în System.out.println original' learnner1 '(' Cursuri actualizate ale cursantului 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Ieșire:

Detalii despre cursantul 2: Id: 2811 Nume: ID curs maxim: EduCourse @ 15db9742 Cursuri cursant 1: Java Spring Microservices Detalii despre cursant 2: Id: 2811 Nume: ID curs maxim: EduCourse @ 15db9742 Cursuri cursant 2: Java Spring Microservices Cursuri actualizate ale cursantului 2: Java Spring JSP

Clonare profundă în Java

În Java, când procesul de clonare se realizează prin implementarea interfeței clonabile, se numește clonare profundă. În acest tip de clonare, va fi creată o copie exactă a tuturor câmpurilor obiectului original. Dar, în cazul în care obiectul original are referințe la alte obiecte ca câmpuri, atunci va fi creată și o copie a acestor obiecte prin apelarea metodei clone (). Acest lucru face ca obiectul clonat să fie independent de obiectul original și orice schimbări făcute în oricare dintre obiecte nu se vor reflecta asupra celuilalt.

cum se folosește loggerul în java

Mai jos am dat exemplul aceluiași:

pachet edureka clasa EduCourse implementează Clonabil {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} Clone Object protejat () aruncă CloneNotSupportedException { return super.clone ()}} class EduLearner implements Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnnerName this.eduCourse = ed Metoda suprasolicitării clonării () pentru crearea unei copii profunde a unui obiect protejat Obiectul Clonării () aruncă CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return student]} clasă publică DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = nou EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = null try {// Crearea unei clone de cursant1 și atribuirea acestuia către cursant2 cursant2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Tipărirea detaliilor Learner1 System.out. println ('Detalii ale cursantului 2:') System.out.println ('Id:' + learnner1.eduId) System.out.println ('Nume:' + learnner1.learnerName) System.out.println ('ID curs: '+ learnner1.eduCourse) // Tipărirea tuturor cursurilor de' learnner1 'System.out.println (' Cursuri ale cursantului 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (cursant1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Tipărirea detaliilor Learner2 System.out.println („Detalii Learner 2:”) System.out.println („Id:” + learnner2.eduId ) System.out.println ('Nume:' + learnner2.learnerName) System.out.println ('Id-ul cursului:' + learnner2.eduCourse) // Tipărirea tuturor cursurilor de 'learnner2' System.out.println ('Cursuri al cursantului 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Schimbarea cursului3 al „Learner2” Learner2.eduCourse.course3 = „JSP” // Această modificare nu se va reflecta în original ” cursant1 'System.out.println (' Cursuri ale cursantului 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. curs3) // Cursuri actualizate ale cursantului2 System.out.println ('Cursuri ale cursantului 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Ieșire:

Detalii despre cursantul 2: Id: 2811 Nume: ID-ul cursului maxim: edureka.EduCourse@15db9742 Cursurile cursantului 1: Microserviciile Java Spring Detalii despre cursantul 2: Id: 2811 Nume: ID-ul cursului maxim: edureka.EduCourse@6d06d69c Cursurile cursantului 2 : Java Spring Microservices Cursuri ale cursantului 1: Java Spring Microservices Cursuri ale cursantului 2: Java Spring JSP

Acest lucru ne aduce la sfârșitul acestui articol despre Clonarea în Java. Dacă doriți să aflați mai multe despre Java, vă puteți referi la .

Acum că ați înțeles ce este o clonare în Java, verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început important în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui articol „Clonarea în Java” și vă vom contacta cât mai curând posibil.