logo

Java Copy Constructor pavyzdys

Kaip C++, Java taip pat palaiko kopijavimo konstruktorius . Bet į C++ jis sukurtas pagal numatytuosius nustatymus. Nors Java mes apibrėžiame savo kopijavimo konstruktorių. Šiame skyriuje mes išmoksime kopijuoti konstruktorių Java su pavyzdžiu .

Konstruktorius

Java, a konstruktorius yra tas pats kaip metodas, tačiau vienintelis skirtumas yra tas, kad konstruktoriaus pavadinimas yra toks pat kaip ir klasės pavadinimas. Jis naudojamas klasės egzemplioriui sukurti. Jis iškviečiamas automatiškai, kai sukuriame klasės objektą. Jis neturi grąžinimo tipo. Atminkite, kad konstruktorius negali būti abstrakčiai , galutinis , sinchronizuoti , ir statinis . Negalime nepaisyti konstruktoriaus. Kai jis iškviečiamas, jis užima šiek tiek vietos atmintyje.

Konstruktorių tipai

  • Numatytasis konstruktorius
  • Parametrizuotas konstruktorius

Išskyrus pirmiau minėtus du konstruktorius, Java taip pat palaiko kopijavimo konstruktorių. Aptarkime tai išsamiai.

Kodėl reikalingas kopijavimo konstruktorius?

Kartais susiduriame su problema, kai reikėjo sukurti tikslią esamo klasės objekto kopiją. Taip pat yra sąlyga, jei padarėme kokių nors pakeitimų kopijoje, tai neturėtų atsispindėti originalioje ir atvirkščiai. Tokiais atvejais Java pateikia a sąvoką kopijavimo konstruktorius .

Kopijavimo konstruktorius

Java kalboje kopijavimo konstruktorius yra specialus konstruktoriaus tipas, kuris sukuria objektą naudodamas kitą tos pačios Java klasės objektą. Jis grąžina esamo klasės objekto kopiją.

Galutiniam laukui galime priskirti reikšmę, bet to negalima padaryti naudojant klono () metodą. Jis naudojamas, jei norime sukurti gilią esamo objekto kopiją. Jį lengviau įgyvendinti, palyginti su klono() metodu.

Pastaba: jo negali paveldėti poklasiai. Jei bandome inicijuoti antrinės klasės objektą iš pirminės klasės nuorodos, susidursime su perdavimo problema, kai jį klonuojame su kopijavimo konstruktoriumi.

Kopijavimo konstruktoriaus naudojimas

Galime naudoti kopijavimo konstruktorių, jei norime:

  • Sukurkite objekto, kuriame yra keli laukai, kopiją.
  • Sukurkite gilią sunkių objektų kopiją.
  • Venkite Object.clone() metodo naudojimo.

Copy Constructor privalumai

  • Jei laukas paskelbtas galutiniu, kopijos konstruktorius gali jį pakeisti.
  • Nereikia rašyti.
  • Jį naudoti lengviau, jei objektas turi kelis laukus.
  • Dėl to lengva pridėti lauką prie klasės. Turime pakeisti tik kopijavimo konstruktorių.

Kopijavimo konstruktoriaus kūrimas

Norėdami sukurti „Java“ kopijos konstruktorių, atlikite toliau nurodytus veiksmus.

  • Sukurkite konstruktorių, kuris priima tos pačios klasės objektą kaip parametrą.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Nukopijuokite kiekvieną lauko (kintamojo) objektą į naujai sukurtą egzempliorių.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //copying each filed this.price = fruits.price; //getter this.name = fruits.name; //getter } } 

Kopijavimo konstruktoriaus pavyzdys

CopyConstructorExample.java

 public class Fruit { private double fprice; private String fname; //constructor to initialize roll number and name of the student Fruit(double fPrice, String fName) { fprice = fPrice; fname = fName; } //creating a copy constructor Fruit(Fruit fruit) { System.out.println('
After invoking the Copy Constructor:
'); fprice = fruit.fprice; fname = fruit.fname; } //creating a method that returns the price of the fruit double showPrice() { return fprice; } //creating a method that returns the name of the fruit String showName() { return fname; } //class to create student object and print roll number and name of the student public static void main(String args[]) { Fruit f1 = new Fruit(399, 'Ruby Roman Grapes'); System.out.println('Name of the first fruit: '+ f1.showName()); System.out.println('Price of the first fruit: '+ f1.showPrice()); //passing the parameters to the copy constructor Fruit f2 = new Fruit(f1); System.out.println('Name of the second fruit: '+ f2.showName()); System.out.println('Price of the second fruit: '+ f2.showPrice()); } } 

Išvestis:

 Name of the first fruit: Ruby Roman Grapes Price of the first fruit: 399.0 After invoking the Copy Constructor: Name of the second fruit: Ruby Roman Grapes Price of the second fruit: 399.0 

Copy Constructor vs clone() metodas

Tiek kopijavimo konstruktorius, tiek metodas clone() naudojami esamo klasės objekto kopijai sukurti. Tačiau naudoti kopijavimo konstruktorių yra lengviau ir geriau, palyginti su metodu Clone() dėl toliau nurodytų priežasčių:

  • Jei naudojame klono() metodą, būtina importuoti Galima klonuoti Metodas gali padaryti išimtį CloneNotSupportException. Taigi, išimties tvarkymas programoje yra sudėtinga užduotis. Nors kopijavimo konstruktoriuje tokio sudėtingumo nėra.
  • Negalime priskirti reikšmės, jei laukai yra galutinis . Būdami kopijavimo konstruktoriuje galime priskirti reikšmes galutiniams laukams.
  • Clone() metodu grąžintas objektas turi būti šriftas . Nors kopijavimo konstruktoriuje tokio reikalavimo nėra.