Kā ieviest privāto konstruktoru Java



Šis raksts sniegs jums detalizētas un visaptverošas zināšanas par Java privāto konstruktoru un tā lietošanu ar piemēriem.

Konstruktori tiek izmantoti, lai inicializētu objekta stāvokli. Līdzīgi metodēm, konstruktors var turēt arī apgalvojumu kolekciju, ko var saukt tikai par instrukcijām. Šajā rakstā mēs apspriedīsim privāto konstruktoru šādā secībā:

Ievads Java konstruktorā

Konstruktori tiek izpildīti objekta izveidošanas laikā. Lai labāk izprastu konstruktoru un tā lietojumus, vienkārši domājiet par kasti kā klasi. Tiek pieņemts, ka Box klasē ir daži klases mainīgie (t.i., garums, platums un augstums). Tomēr objekta izveidošanas laikā (t.i., lodziņš pastāv datora atmiņā), vai var pastāvēt lodziņš, kura izmēru lielumiem nav noteikta vērtība.





Skaidrs, ka nē.

Tādējādi tiek ieviests konstruktors, kas objektu izveidošanas laikā piešķir klases mainīgajiem lielumus. To var skaidri izdarīt programmētājs vai pati Java. Kad to veic pati Java, to sauc par noklusējuma konstruktoru.



Ir obligāti jāsaprot, ka jebkurai metodei, kurai ir piekļuves specifikators, ko kodētājs nodrošina konstruktoram, kurš ir privāts, var piekļūt tikai pašā klasē.

Privāts konstruktors Java valodā

Singletona klase

Pēc paša nosaukuma klasi varam saukt par vieninieku, ja tas ierobežo šīs klases objektu skaitu līdz vienam. Šādos gadījumos klasei var būt tikai viens objekts. Atsevišķas klases tiek izsmeļoši izmantotas tādos jēdzienos kā tīklošana un datu bāzes savienojamība. Singletona klase ir a privātā klase .



Lai atgūtu rezultātu, ir jābūt citam veidam, kā iegūt klases eksemplāru un atgriešanas metodi. Zemāk ir trāpīga tā paša ilustrācija. Pirmajā piktogrammā ir attēlots iespējamais rezultāts, kur “a.x” vērtība ir vienāda ar 20 un “b.x” vērtība ir arī 20. Kodā, kamēr mēs definējam vienīgo privāto klasi, tās veidotājiem nevar piekļūt ārpus klases.

Ax vērtība = 20

Bx vērtība = 20

// Java programma, lai parādītu Singleton // modeļa ieviešanu, izmantojot privātus konstruktorus. importēt java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // privātajam konstruktoram nevar piekļūt ārpus klases private MySingleton () {} // Rūpnīcas metode, lai lietotājiem nodrošinātu statiskas publiskas MySingleton instances getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Vadītāja klases klase Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Ax vērtība =' + ax) System.out.println ('bx vērtība =' + bx)}}

Privātā konstruktora ietekme Java

Privātie konstruktori nevar piekļūt atvasinātām klasēm no citas klases. Tādējādi mums ir jāpiešķir publiska funkcija, kas izsauc privāto konstruktoru. Gadījumā, ja objekts netiek inicializēts, vai mums ir jānosūta atpakaļ objektam objekts, ja tas tika inicializēts. Tas ir īpaši noderīgi objektiem, kurus nevar inicializēt. Privātu konstruktoru izmanto šādos gadījumos:

ko split dara java
  • Attiecīgās klases, kurām ir tikai statiskas metodes un dalībnieki.
  • Īpašās klases, kurās ir plaši izmantoti tikai statiskie galīgie dalībnieki (konstantes).
  • Iekļaut vieniniekus.
  • Iekļaut rūpnīcas metodes.

Izmantot uzskaitījumus, kas ir tipam droši.

Iekšējā konstruktora ķēde

Iekšējā konstruktora ķēde ir tad, kad konstruktors izsauc citu tās pašas klases konstruktoru, tad to var saukt par konstruktora ķēdi. Mūsu pienākums ir izmantot šo atslēgvārdu, lai izsauktu citu klases konstruktoru. Dažos gadījumos to izmanto, lai definētu dažas klases mainīgo noklusējuma vērtības. Lūdzu, ņemiet vērā arī to, ka koda blokā pirmajam priekšrakstam jābūt citam konstruktora izsaukumam.

Turklāt nevajadzētu būt rekursīviem zvaniem, kas radīs bezgalīgu loku. Ļaujiet mums tagad apskatīt konstruktora ķēdes piemēru Java programmā.

pakete com.journaldev.constructor public class Employee {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('Izveidots noklusētais darbinieks')} public Employee (int i) { this ('John Doe', i) System.out.println ('Employee Created with Default Name')} publiskais darbinieks (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) Darbinieka emp1 = jauns darbinieks (10) System.out.println (emp1) Darbinieka emp2 = new Employee ('Pankaj', 20) System.out.println (emp2)} @Orride public String toString () {return 'ID =' + id + ', Name =' + name} public int getId () {return id } public void setId (int id) {this.id = id} public String getName () {return name} public void setName (String name) {this.name = name}}

Singleton klases dizaina modelis

  • Klases līmeņa dalībnieks (dedzīgas inicializācijas metode):

  1. Pirmkārt, izveidojiet vienkrāsainu klases privātu pastāvīgu statisku gadījumu.

  2. Pēc tam uzrakstiet statisku metodi, kas atgriež singletona klases objektu, kuru mēs izveidojām kā klases locekļa instanci.

    kā izmantot iteratoru
  3. Lai tieši piekļūtu pastāvīgai statiskai instancei, ir iespējams atzīmēt statisku locekli kā sabiedrību.

  4. Vienkāršības klase instantiation ziņā atšķiras no parastās Java klases. Normālā klasē tiek izmantots konstruktors, bet vienklases klasē mēs izmantojam get instance () metodi.

  • Klases līmeņa biedrs (slinkās inicializācijas metode):

  1. Pirmkārt, ierosiniet konstruktoru kā privātu.

  2. Pēc tam izveidojiet šīs vienīgās klases privātu statisku gadījumu. Paturiet prātā, lai to NAV piemērotu.

  3. Pēc tam uzrakstiet statisku metodi, kas pārbauda, ​​vai statiskā instances loceklis nav derīgs, un iniciē instanci. Visbeidzot, tas atgriež vieninieka klases objektu.

  • Klases līmeņa biedrs (Lazy Initialization with double lock Method):

Apsveriet divus pavedienus, kas darbojas, kur abi vienlaikus iekļaujas paziņojumā “ja”, kamēr eksemplārs ir nulle. Kur, viena pavediens nonāk sinhronizētā blokā, lai izveidotu instanci, bet otra ir bloķēta. Tā kā pirmais pavediens atrodas sinhronizētajā blokā, rindas pavediens izveido vēl vienu atsevišķu objektu. Lūdzu, ņemiet vērā, ka, tā kā otrais pavediens nonāk sinhronizētā blokā, tas nepārbauda, ​​vai instance nav nulle.

  • Izmantojot ligzdoto iekšējo klasi (Lazy Load metode):

Šeit tas ir balstīts uz Java valodas specifikācijām (JLS). Java virtuālā mašīna statiskos datu dalībniekus ielādē tikai pēc pieprasījuma. Tādējādi Singleton klase vispirms tiek ielādēta JVM. Tādējādi klasē nav statisku datu dalībnieka

Singleton klases īpašnieks neielādē SINGLE_INSTANCE. Kad mēs izmantojam getIntance metodi, notiek tikai tas. JLS garantē klases inicializācijas izpildi. Noteikums par skaidru sinhronizāciju statiskajā getInstance () metodē ielādēšanai un inicializēšanai. Tā kā inicializēšana secīgā veidā izveido statisko mainīgo SINGLE_INSTANCE, visas getInstance () vienlaicīgās izsaukumi atgriezīsies vienādi bez sinhronizācijas pieskaitāmās izmaksas.

  • Izmantojot Enums

Ne visas iepriekš minētās pieejas visos gadījumos ir pilnīgs risinājums. Izmantojot refleksiju, var izveidot vairākus iepriekš minēto ieviešanas gadījumus. Abos gadījumos mēs varam apiet privāto konstruktoru un izveidot vairākus gadījumus. Tāpēc jauna pieeja ir izveidot atsevišķu klasi, izmantojot enums. Tā kā enums lauki ir apkopoti laika konstantes, tie ir viņu enum veida gadījumi. Tie tiek veidoti, kad pirmo reizi tiek atsauce uz enum tipu.

Ar to mēs esam nonākuši līdz privātā konstruktora beigām Java rakstā. Es ceru, ka jūs sapratāt privātos konstruktorus un to, kā tos var izmantot Java.

Pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji. Kurss ir paredzēts, lai dotu jums sākumu Java programmēšanā un apmācītu gan Java, gan uzlabotas koncepcijas, kā arī dažādas Java struktūras, piemēram, Hibernate & Spring.

kas ir instances mainīgais

Vai mums ir jautājums? Lūdzu, pieminējiet to šī “Java Tutorial” emuāra komentāru sadaļā, un mēs pēc iespējas ātrāk sazināsimies ar jums.