Kuidas rakendada Java-s privaatset konstruktorit



See artikkel annab teile üksikasjalikud ja põhjalikud teadmised Java privaatsekonstruktorist ning selle kasutamiseks koos näidetega.

Konstruktorid kasutatakse objekti oleku initsialiseerimiseks. Sarnaselt meetoditele mahutab konstruktor ka lausete kogu, mida ei saa nimetada muud kui juhised. Selles artiklis käsitleme Private Constructor'i järgmises järjekorras:

Sissejuhatus Java-sse Constructor

Konstruktorid hukatakse objekti loomise ajal. Konstruktori ja selle rakenduste paremaks mõistmiseks mõelge lihtsalt kastist kui klassist. Eeldatakse, et Box-klassil on mõned klassi muutujad (st pikkus, laius ja kõrgus). Kuid objekti loomise ajal (s.o Box on arvuti mälus) võib ka kast olemas olla, ilma et selle mõõtmete suurustele oleks väärtust määratud.





Ilmselgelt ei.

Seega tutvustatakse konstruktorit, et omistada objekti loomisel klassi muutujatele väärtused. Seda saab selgesõnaliselt teha programmeerija või Java ise. Kui Java ise seda teeb, nimetatakse seda vaikekonstruktoriks.



On hädavajalik mõista, et mis tahes meetodile, millel on kooderi poolt privaatseks muudetud konstruktorile pakutav juurdepääsupreparaat, pääseb juurde ainult klassist endast.

Eraehitaja Java-keeles

Singletoni klass

Nime enda järgi võime klassi nimetada üksikuks, kui see piirab selle klassi objektide arvu ühega. Klassil ei tohi sellistel juhtudel olla rohkem kui üks objekt. Üksikklasse kasutatakse ammendavalt sellistes mõistetes nagu võrguühendus ja andmebaaside ühenduvus. Singletoni klass on a eraklass .



Tulemuse tagasitoomiseks peab olema veel üks viis klassi eksemplari väljavõtmiseks ja tagastusmeetod. Allpool on tabav illustratsioon sellest. Esimene pilt tähistab tõenäolist tulemust, kus „a.x” väärtus võrdub 20-ga ja „b.x” väärtus annab samuti 20. Ehkki koodis määratleme üksikisiku eraklassi, ei saa selle konstruktoritele väljaspool klassi juurde pääseda.

Ax väärtus = 20

Bx väärtus = 20

// Java-programm Singletoni // mustri rakendamise demonstreerimiseks privaatsete konstruktorite abil. import java.io. * klass MySingleton {staatiline MySingletoni eksemplar = null avalik int x = 10 // privaatsele konstruktorile pole juurdepääsu väljaspool klassi private MySingleton () {} // Tehase meetod, et pakkuda kasutajatele staatilisi avalikke MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Draiveriklassi klass {Public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('kirve väärtus =' + ax) System.out.println ('bx =' + bx väärtus}}}

Eraehitaja mõju Java-s

Erakonstruktorid ei pääse juurde tuletatud klassidele, mis pärinevad teisest klassist. Seega peame andma avaliku funktsiooni, mis kutsub eraehitajat. Juhul, kui objekti ei lähtestata, või peame objektile eksemplari tagasi saatma, kui see initsialiseeriti. See on eriti kasulik objektide jaoks, mida ei saa lähtestada. Erakonstruktorit kasutatakse järgmistel juhtudel:

robotprotsesside automatiseerimise tööriistade võrdlus
  • Vastavad klassid, millel on ainult staatilised meetodid ja liikmed.
  • Konkreetsed klassid, kus on ainult laialt kasutusel staatilised lõppliikmed (konstandid).
  • Lisada üksikud.
  • Tehasemeetodite kaasamiseks.

Et kasutada loendusi, mis on tüübikindlad.

Sisemine konstruktori ketid

Sisemine konstruktori aheldamine on see, kui konstruktor kutsub teise sama klassi konstruktori, siis võib seda nimetada konstruktori aheldamiseks. Meie kohus on kasutada seda märksõna klassi teisele konstruktorile helistamiseks. Mõnel juhul kasutatakse seda klassi muutujate mõnede vaikeväärtuste määratlemiseks. Pidage ka meeles, et teine ​​konstruktori kutse peab olema koodiploki esimene lause.

Lisaks ei tohiks olla rekursiivseid kõnesid, mis loovad lõpmatu tsükli. Vaatame nüüd java programmi konstruktori aheldamise näidet.

pakett com.journaldev.constructor public class Employee {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('Vaiketöötaja on loodud')} public Employee (int i) { this ('John Doe', i) System.out.println ('Töötaja on loodud vaikenimega')} avalik töötaja (String s, int i) {this.id = i this.name = s System.out.println ( 'Employee Created')} public static void main (String [] args) {Employee emp = new Employee () System.out.println (emp) Töötaja emp1 = uus töötaja (10) System.out.println (emp1) Töötaja emp2 = new Employee ('Pankaj', 20) System.out.println (emp2)} @Alusta avalik string toString () {return 'ID =' + id + ', Nimi =' + nimi} public int getId () {return id } public void setId (int id) {this.id = id} public String getName () {return name} public void setName (stringi nimi) {this.name = nimi}}

Singletoni klassi kujundusmuster

  • Klassitaseme liige (innukas initsialiseerimise meetod):

  1. Kõigepealt tehke üksikklassist privaatne pidev staatiline eksemplar.

  2. Seejärel kirjutage staatiline meetod, mis tagastab ühe klassi klassi objekti, mille lõime klassi liikme eksemplarina.

    system.exit (1) java
  3. Staatilisele liikmele on võimalik märkida avalikkus, et pääseda otse juurde püsivale staatilisele eksemplarile.

  4. Singletoni klass varieerub tavalisest Java klassist kiirenduse poolest. Tavalises klassis kasutatakse konstruktorit, kuid üksikklassi puhul kasutame meetodit get instance ().

  • Klassitaseme liige (Lazy Initialization Method):

  1. Esmalt algatage konstruktor privaatsena.

  2. Seejärel looge selle üksikklassi privaatne staatiline eksemplar. Pidage meeles, et EI PÕHJENDA seda.

  3. Seejärel kirjutage staatiline meetod, mis kontrollib staatilise eksemplari liikme nulli ja algatab eksemplari. Lõpuks tagastab see üksikklassi objekti.

  • Klassitaseme liige (Lazy Initialization with double lock Method):

Mõelgem kahele niidile, mis töötavad, kus mõlemad satuvad üheaegselt lause 'if' sisse, kui eksemplar on null. Kus, üks lõim läheb sünkroonitud plokki eksemplari loomiseks, teine ​​aga blokeeritud. Kuna esimene lõime asub sünkroonitud plokis, loob järjekorras olev lõime veel ühe üksikobjekti. Pange tähele, et kui teine ​​lõim siseneb sünkroonitud plokki, ei saa ta kontrollida, kas eksemplar pole null.

  • Pesastatud siseklassi kasutamine (Lazy Load meetod):

Siin põhineb see Java keele spetsifikatsioonidel (JLS). Java virtuaalne masin laadib staatilisi andmeliikmeid ainult nõudmisel. Seega laadib Singletoni klass kõigepealt JVMi poolt. Seega pole klassis ühtegi staatilist andmeliiget

Singletoni klassi omanik ei laadi üksust SINGLE_INSTANCE. Kui kasutame meetodit getIntance, toimub see ainult. JLS tagab klassi initsialiseerimise. Säte selgesõnaliseks sünkroonimiseks staatilisel getInstance () meetodil laadimiseks ja lähtestamiseks. Kui initsialiseerimine loob staatilise muutuja SINGLE_INSTANCE järjestikku, tulevad kõik getInstance () samaaegsed invokatsioonid tagasi ilma sünkroonimiskuludeta.

  • Kasutades Enumsi

Kõik ülaltoodud lähenemisviisid pole kõigil juhtudel terviklahendused. Peegelduse abil saab luua ülaltoodud rakenduste mitu eksemplari. Mõlema stsenaariumi korral võime privaatsest konstruktorist mööda hiilida ja luua mitu eksemplari. Seetõttu on uus lähenemisviis luua üksikklass, kasutades enums. Kuna enumsi väljad on kompileeritud ajakonstandid, on need oma loenditüüpi eksemplarid. Need koostatakse, kui loenditüübile viidatakse esimest korda.

Sellega jõuame Java-artiklis Private Constructor lõpuni. Loodan, et saite erahoonestajatest aru ja kuidas neid Java-s kasutada saab.

Vaadake autor Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik koosneb enam kui 250 000 rahulolevast õppijast ja mis levib üle kogu maailma. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java arendajad. Kursus on loodud selleks, et anda teile Java-programmeerimises alustamine ja õpetada teid nii Java-põhiprogrammide kui ka täiustatud kontseptsioonide ning erinevate Java-raamistike jaoks, nagu Hibernate & Spring.

sorteerimise massiiv c ++

Kas teil on meile küsimus? Palun mainige seda selle 'Java Tutorial' ajaveebi kommentaaride osas ja võtame teiega ühendust niipea kui võimalik.