Mi a klónozás a Java-ban és típusai?



Ez a cikk a Java klónozásáról részletes betekintést nyújt a klónozási folyamatba és a Java által támogatott különféle klónozásokba.

A programozás során gyakran találkozunk olyan esetekkel, amikor egy teljes kódrészletet újra fel kell használnunk. A kód átírása terjedelmesvé teszi a programot, mindez csökkenti a program hatékonyságát. Így a Java kiváló tulajdonságot nyújt számunkra, amely megmenti ezt a megterhelő feladatot. Ezt Klónozásnak nevezik a Java-ban, és ennek a cikknek a segítségével teljes betekintést nyújtok be.

Az alábbiakban bemutatom azokat a témákat, amelyekről ebben a cikkben fogok tárgyalni:





Klónozás Java-ban

Az objektumok klónozása a Java-ban az eredeti objektum pontos másolatának létrehozása. Más szavakkal, ez egy új objektum létrehozásának módja az összes adat és attribútum másolásával az eredeti objektumból. Ez csak a. Klón () metódusának megvalósításával lehetséges java.lang.Tárgy osztály. A klónozási módszer egy objektum pontos másolatát hozza létre, amelyre vonatkozottmezőnkénti hozzárendelési sorrendben hívja meg, és visszaadja az új objektum hivatkozást . Egy dologra emlékeznie kell a Java-ban, hogy azok az objektumok, amelyek megvalósítják a klónfelületet, amely marker interfész, használhatják a klónot ().

különbség a végleges és a java-ban végleges között

Most, hogy tisztában van azzal, mi klónozik a Java-ban, nézzük meg ennek a szolgáltatásnak a különféle előnyeit.



A klónozás előnyei a Java-ban

Az alábbiakban felsoroltam a klónozás Java-ban történő felhasználásának néhány legérdekesebb tulajdonságát.

  • Segít a kódsorok csökkentésében.
  • A másolás leghatékonyabb és leghatékonyabb módjatárgyakat.
  • A klón () a tömb másolásának leggyorsabb módszere.

Megjegyzés: Bár a klónozás használata bizonyos tervezési problémákat okozhat, de ha megfelelő stratégiai módon használja, az előnyöket jelenthet.

A klónozás típusai a Java-ban

A Java-ban történő klónozás csoportosíthatókét kategóriába:



  1. Sekély klónozás
  2. Mély klónozás

Értsük meg mindegyiket egyenként.

Sekély klónozás

A Java-ban, amikor a klónozási folyamat a clone () metódus meghívásával történik, sekély klónozásnak hívják. Ez az alapértelmezett klónozási folyamat a Java-ban, ahol az eredeti objektum sekély másolata jön létre pontos mezővel. Abban az esetben, ha az eredeti objektum mezőként más objektumokra hivatkozik, akkor az új objektum létrehozása helyett csak az adott objektum hivatkozásait klónozzák. Más szavakkal, ha megváltoztatja a klónozott objektumok értékét, az az eredetiben is tükröződik. Így a sekély klónozás az eredeti objektumtól függ.

mire használják a bábot

sekély példány - klónozás Java-ban - EdurekaAz alábbiakban bemutattam ugyanarra a példát:

csomag edureka osztály EduCourse {String tanfolyam1 String tanfolyam2 String tanfolyam3 nyilvános EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} osztály EduLearner megvalósítja Cloneable {int eduId String EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // A klón alapértelmezett verziója () metódus védett Object clone () dobja vissza a CloneNotSup visszatérést CloneNotSup .clone ()}} public class 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 {// Tanuló1 klónjának létrehozása és hozzárendelése tanulóhoz2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // A Learner1 részleteinek nyomtatása System.out.p rintln ('A 2. tanuló részletei:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Név:' + tanuló1.learnerNév) System.out.println ('Tanfolyam azonosítója: '+ learner1.eduCourse) // A' learner1 'összes tanfolyamának kinyomtatása System.out.println (' Course of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // A Learner2 részleteinek nyomtatása System.out.println ('A 2. tanuló részletei:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Név:' + learner2.learnerName) System.out.println ('Tanfolyam azonosítója:' + learner2.eduCourse) // A 'learner2' összes tanfolyamának nyomtatása System.out.println ('Tanfolyamok a 2. tanulóból: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // A' tanuló2 tanfolyamának megváltoztatása 'learner2.eduCourse.course3 =' JSP '// Ez a változás tükröződik az eredeti' learner1 'System.out.println (' A 2. tanuló frissített tanfolyamai: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Kimenet:

A 2. tanuló részletei: Id: 2811 Név: Max. Tanfolyamazonosító: EduCourse @ 15db9742 1. tanuló tanfolyamai: Java Spring Microservices A 2. tanuló részletei: Id: 2811 Név: Max. Tanfolyamazonosító: EduCourse @ 15db9742 2. tanuló tanfolyamai: Java rugós mikroszolgáltatások A 2. tanuló frissített tanfolyamai: Java Spring JSP

Mély klónozás Java-ban

A Java-ban, amikor a klónozási folyamat a klónozható felület megvalósításával történik, akkor mély klónozásnak hívják. Ebben a típusú klónozásban az eredeti objektum összes mezőjének pontos másolata jön létre. De abban az esetben, ha az eredeti objektum mezőként hivatkozik más objektumokra, akkor ezeknek az objektumoknak a másolata is létrejön a clone () metódus meghívásával. Ez a klónozott objektum függetlenné válik az eredeti objektumtól, és az objektum bármelyikében végrehajtott bármilyen változás nem fog tükröződni a másikon.

mi az oka annak, hogy létrehozunk egy példányt a fájlosztályból?

Az alábbiakban bemutattam ugyanarra a példát:

csomag edureka osztály EduCourse megvalósítja a Cloneable {String pálya1 String pálya2 String tanfolyam3 nyilvános EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} védett objektum klón () dobja CloneExcup return super.clone ()}} osztály EduLearner implementálja a Cloneable {int eduId karakterlánc tanulónevet EduCourse eduCourse nyilvános EduLearner (int eduId, karakterlánc tanulónév, EduCourse eduCourse) {this.eduId = eduId this.learnerName = tanulótNév this.eduCourse A clone () módszer felülírása az objektumvédett objektum mély másolatának létrehozásához. Az Object clone () CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} public class dobja 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 próbálkozás {// A tanuló1 klónjának létrehozása és hozzárendelése tanulóhoz2 tanuló2 = (EduLearner) tanuló1.klón ()} fogás (CloneNotSupportedException e) {e.printStackTrace ()} // A Learner1 System.out részleteinek nyomtatása. println ('A 2. tanuló részletei:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Név:' + tanuló1.learnerName) System.out.println ('Tanfolyam azonosítója: '+ learner1.eduCourse) // A' learner1 'összes tanfolyamának kinyomtatása System.out.println (' Course of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // A Learner2 részleteinek nyomtatása System.out.println ('A 2. tanuló részletei:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Név:' + learner2.learnerName) System.out.println ('Tanfolyam azonosítója:' + learner2.eduCourse) // A 'learner2' összes tanfolyamának nyomtatása System.out.println ('Tanfolyamok 2. tanuló: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // A „tanuló2” tanfolyamának megváltoztatása learner2.eduCourse.course3 = 'JSP' // Ez a változás nem jelenik meg az eredetiben ' learner1 'System.out.println (' 1. tanuló tanfolyamai: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. tanfolyam3) // A tanuló2 frissített tanfolyamai System.out.println ('2. tanuló tanfolyamai:') System.out.println (tanuló2.eduCourse.course1) System.out.println (tanuló2.eduCourse.course2) System.out. println (tanuló2.eduPálya.tanfolyam3)}}

Kimenet:

A 2. tanuló adatai: Id: 2811 Név: Max. Tanfolyam azonosító: edureka.EduCourse@15db9742 1. tanuló tanfolyamai: Java Spring Microservices A 2. tanuló részletei: Id: 2811 Név: Max. Tanfolyam azonosítója: edureka.EduCourse@6d06d69c 2. tanuló tanfolyamai : Java Spring Microservices tanfolyamok 1: Java Spring Microservices tanfolyamok 2: Java Spring JSP

Ezzel eljutottunk a Java klónozásáról szóló cikk végéhez. Ha többet szeretne tudni a Java-ról, olvassa el a mi oldalunkat .

Most, hogy megértette, mi a klónozás a Java-ban, nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték, hogy előrelépést nyújtson a Java programozásban, és kiképezzen mind az alapvető, mind a fejlett Java koncepciókra, valamint a különböző Java keretrendszerekkel, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a „Klónozás Java-ban” cikk megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.