Kas yra klonavimas „Java“ ir jo tipai?

Šis straipsnis apie „Java“ klonavimą suteiks jums išsamių įžvalgų apie klonavimo procesą ir įvairius „Java“ palaikomus klonavimo tipus.

Programuodami dažnai susiduriame su scenarijais, kai turime pakartotinai naudoti visą kodo dalį. Perrašius kodą, programa tampa didžiulė, tuo pačiu sumažinant programos efektyvumą. Taigi „Java“ suteikia mums puikią savybę, kurią gelbsti atlikus šią sudėtingą užduotį. Tai vadinama „Java“ klonavimu ir šiame straipsnyje pateiksiu jums išsamias įžvalgas.

Toliau pateikiamos temos, kurias aptarsiu šiame straipsnyje:



Klonavimas „Java“

Objektų klonavimas „Java“ yra tikslios originalaus objekto kopijos kūrimo procesas. Kitaip tariant, tai yra būdas sukurti naują objektą, nukopijuojant visus duomenis ir atributus iš pradinio objekto. Tai įmanoma tik įgyvendinant klono () metodą java.lang.Object klasė. Klono metodas sukuria tikslią objekto kopiją, kuriai jis buvo skirtasiškviečiamas laukų priskyrimo tvarka ir grąžins naują objekto nuorodą . Vieną dalyką, kurį turite atsiminti „Java“, objektams, įgyvendinantiems klono sąsają, kuri yra žymeklio sąsaja, leidžiama naudoti kloną ().

kaip konvertuoti dvejetainę eilutę į dešimtainę Java

Dabar, kai žinote, kas klonuoja „Java“, pažiūrėkime į įvairius šios funkcijos naudojimo pranašumus.

Klonavimo Java privalumai

Žemiau išvardijau keletą įdomiausių klonavimo „Java“ funkcijų.

  • Padeda sumažinti kodo eilutes.
  • Veiksmingiausias ir efektyviausias kopijavimo būdasobjektai.
  • Taip pat klonas () laikomas greičiausiu masyvo kopijavimo metodu.

Pastaba: Nors naudojant klonavimą gali kilti tam tikrų dizaino problemų, tačiau jei jį naudosite tinkamai strategiškai, tai gali būti naudinga.

Klonavimo tipai Java

Klonavimą Java galima sugrupuotiį dvi kategorijas:

  1. Negilus klonavimas
  2. Gilus klonavimas

Supraskime kiekvieną iš jų po vieną.

Negilus klonavimas

„Java“, kai klonavimo procesas atliekamas pasitelkiant „clone ()“ metodą, jis vadinamas „Shallow Cloning“. Tai yra numatytasis „Java“ klonavimo procesas, kai bus sukurta sekli originalaus objekto kopija su tiksliu lauku. Jei originalus objektas turi nuorodas į kai kuriuos kitus objektus kaip laukus, vietoj naujo objekto kūrimo bus klonuojamos tik to objekto nuorodos. Kitaip tariant, jei pakeisite klonuotų objektų vertę, tai atsispindės ir originale. Taigi, negilus klonavimas priklauso nuo pirminio objekto.

transformacijos informatikoje su pavyzdžiu

sekli kopija - Klonavimas Java - EdurekaŽemiau pateikiau to paties pavyzdį:

paketas edureka klasė „EduCourse“ {Styginių eiga1 Styginių eiga2 Styginių eiga3 viešasis „EduCourse“ (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} klasės „EduLearner“ įgyvendina „Cloneable“ {int eduId String ling EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Numatytoji klono versija () metodas apsaugotas Objekto klonas () meta grįžti „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“ {// Sukurkite besimokančiojo kloną1 ir priskirkite jį besimokančiajam2 learner2 = (EduLearner) besimokančiajam1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Išsamios informacijos apie mokinį1 spausdinimas System.out.p rintln ('Išsami informacija apie 2 mokinį:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Pavadinimas:' + besimokantysis1.learnerName) System.out.println ('Kurso ID: '+ learner1.eduCourse) // Visų „besimokančiojo1“ kursų spausdinimas System.out.println („1 mokinio kursai:“) System.out.println (besimokančiojo1.eduCourse.course1) sistemos.out.println (mokinio1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Išsami informacija apie Learner2 System.out.println ('Informacija apie 2 mokinį:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Pavadinimas:' + besimokantysis2.learnerName) System.out.println ('Kurso ID:' + learner2.eduCourse) // Visų 'besimokančiojo2' sistemos.out.println ('Kursai) kursų spausdinimas mokinio 2 iš: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // „Learner2“ 3 kurso pakeitimas 'learner2.eduCourse.course3 =' JSP '// Šis pakeitimas atsispindės originaliame' mokinys1 'System.out.println (' Atnaujinti mokinio 2 kursai: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Išvestis:

Išsami informacija apie 2 mokinį: Id: 2811 Pavadinimas: Maksimalus kursų ID: EduCourse @ 15db9742 1 mokinio kursai: „Java Spring Microservices“ Išsami informacija apie 2 mokinį: Id: 2811 Vardas: Maksimalus kursų ID: „EduCourse @ 15db9742“ 2 mokinio kursai: „Java Spring Microservices“ Atnaujinti mokinio 2 kursai: „Java Spring JSP“

Gilus klonavimas „Java“

„Java“, kai klonavimo procesas atliekamas įdiegiant „Cloneable“ sąsają, jis vadinamas „Deep Cloning“. Šio tipo klonavimu bus sukurta tiksli visų originalaus objekto laukų kopija. Bet tuo atveju, kai originalus objektas turi nuorodas į kitus objektus kaip laukus, tada tų objektų kopija taip pat bus sukurta iškviečiant clone () metodą. Tai daro klonuotą objektą nepriklausomą nuo pradinio objekto, o bet kuriame objekte atlikti pakeitimai neatsispindės kitame.

kaip įdiegti hadoop ubuntu

Žemiau pateikiau to paties pavyzdį:

paketas edureka klasė „EduCourse“ įgyvendina Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} apsaugotas objekto klonas () meta CloneExcup {meta CloneExcup grąžinti super.clone ()}} klasę „EduLearner“ įgyvendina „Cloneable“ {int eduId eilutės mokinio vardą „EduCourse“ „eduCourse“ viešąjį „EduLearner“ („int eduId“, „String“ mokinio vardą, „EduCourse“ eduCourse) {this.eduId = eduId this.learnerName = mokinio vardą = Nepaisomas klono () metodas kuriant gilią objekto saugomos kopijos objektą. Klonas () išmeta viešąją klasę CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} „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 pabandykite {// Sukurti mokinio1 kloną ir priskirti jį mokiniui2 mokiniui2 = (EduLearner) mokiniui1.klonas ()} pagauti (CloneNotSupportedException e) {e.printStackTrace ()} // Išsami informacija apie mokinį1 System.out. println ('Informacija apie 2 mokinį:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Pavadinimas:' + besimokančiojo1.learnerName) System.out.println ('Kurso ID: '+ learner1.eduCourse) // Visų „besimokančiojo1“ kursų spausdinimas System.out.println („1 mokinio kursai:“) System.out.println (besimokančiojo1.eduCourse.course1) sistemos.out.println (mokinio1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Išsami informacija apie Learner2 System.out.println ('Informacija apie 2 mokinį:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Pavadinimas:' + besimokantysis2.learnerName) System.out.println ('Kurso ID:' + learner2.eduCourse) // Visų 'besimokančiojo2' sistemos.out.println ('Kursai) kursų spausdinimas mokinio 2 iš: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Keisti „besimokančiojo2“ kursą3 besimokančiojo2.eduCourse.course3 = 'JSP' // Šis pakeitimas nebus atspindėtas originale ' learner1 'System.out.println (' 1 mokinio kursai: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // Atnaujinti mokinio2 kursai System.out.println ('2 mokinio kursai:') System.out.println (besimokančiojo2.eduCourse.course1) System.out.println (besimokančiojo2.eduCourse.course2) System.out. println (besimokantysis2.eduKursas.kursas3)}}

Išvestis:

Išsami informacija apie 2 mokinį: Id: 2811 Vardas: Maksimalus kursų ID: edureka.EduCourse@15db9742 1 mokinio kursai: „Java Spring Microservices“ Išsami informacija apie 2 besimokantįjį: Id: 2811 Vardas: Maks. Kurso ID: edureka.EduCourse@6d06d69c 2 mokinio kursai : Java besimokančiojo „Microsoft Spring Microservice“ kursai: „Java Spring 2“ besimokančiojo „Microsoft Spring Microservice“ kursai: Java Spring JSP

Tai leidžia mums užbaigti šį straipsnį apie „Java“ klonavimą. Jei norite sužinoti daugiau apie „Java“, galite kreiptis į mūsų .

Dabar, kai supratote, kas yra „Java“ klonavimas, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žvalgytis į „Java“ programavimą ir išmokyti pagrindines ir pažangesnes „Java“ koncepcijas kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio straipsnio „Klonavimas programoje„ Java “komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.