Sådan implementeres privat konstruktør i Java

Denne artikel giver dig en detaljeret og omfattende viden om Private Constructor i Java, og den bruges med eksempler.

Konstruktører bruges til at initialisere et objekts tilstand. I lighed med metoder kan en konstruktør også have en samling udsagn, der kun kan kaldes instruktioner. I denne artikel vil vi diskutere Private Constructor i i følgende rækkefølge:



Introduktion til Constructor i Java

Konstruktører udføres på tidspunktet for oprettelse af objekt. For at få en bedre forståelse af konstruktøren og dens applikationer, skal du bare tænke på en boks som en klasse. En boksklasse antages at have nogle klassevariabler (dvs. længde, bredde og højde). På tidspunktet for oprettelsen af ​​dets objekt (dvs. Box findes i computerens hukommelse), kan der imidlertid eksistere en boks uden nogen værdi defineret for dens dimensionelle størrelser.



Det er klart, nej.

Derfor introduceres en konstruktør til at tildele værdier til klassevariabler ved oprettelse af objekt. Dette kan eksplicit udføres af programmøren eller af Java selv. Når det er gjort af Java selv, betegnes det som en standardkonstruktør.



Det er bydende nødvendigt at forstå, at enhver metode, der besidder adgangsspecifikator, der leveres af koderen til konstruktøren, som er gjort privat, kun kan fås i selve klassen.

Privat konstruktør i Java

drej streng til array php

Singleton klasse

Fra selve navnet kan vi kalde en klasse en singleton, hvis den begrænser antallet af objekter i den klasse til en. En klasse kan ikke have mere end et enkelt objekt i sådanne tilfælde. Singleton-klasserne bruges udtømmende i begreber som netværk og databaseforbindelse. Singleton klasse er en privat klasse .



Der skal være en anden måde at udtrække forekomsten af ​​klassen på og en returmetode for at hente resultatet tilbage. Nedenfor er en passende illustration af det samme. Det første piktogram viser det sandsynlige resultat, hvor værdien af ​​“a.x” svarer til 20, og værdien af ​​“b.x” også resulterer i 20. I koden, mens vi definerer singleton private klasse, kan konstruktørerne af den ikke tilgås uden for klassen.

Værdien af ​​a.x = 20

Værdien af ​​b.x = 20

// Java-program til demonstration af implementering af Singleton // mønster ved hjælp af private konstruktører. importer java.io. * klasse MySingleton {statisk MySingleton-forekomst = null offentlig int x = 10 // privat konstruktør kan ikke tilgås uden for klassen privat MySingleton () {} // Fabriksmetode for at give brugerne forekomster statisk offentlig MySingleton getInstance () {if (forekomst == null) forekomst = ny MySingleton () returneringsforekomst}} // Førerklasse klasse Hoved {offentlig statisk ugyldig hoved (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Value of ax =' + ax) System.out.println ('Value of bx =' + bx)}}

Virkning af privat konstruktør i Java

De private konstruktører har ikke adgang til afledte klasser fra en anden klasse. Således er vi nødt til at give en offentlig funktion, der kalder den private konstruktør. Hvis objektet ikke initialiseres, eller vi er nødt til at sende en instans tilbage til objektet, hvis det blev initialiseret. Dette er især meget nyttigt for objekter, som ikke kan initialiseres. En privat konstruktør bruges i følgende tilfælde:

  • De respektive klasser, som kun har statiske metoder og medlemmer.
  • De specifikke klasser, der kun har brugt meget statiske endelige medlemmer (konstanter).
  • At indarbejde singletoner.
  • At indarbejde fabriksmetoderne.

At bruge optællinger, som er typesikre.

Intern konstruktorkæde

Intern konstruktorkæde er, når en konstruktør kalder en anden konstruktør af samme klasse, så kan den kaldes konstruktorkæde. Det er vores pligt at bruge dette nøgleord til at kalde en anden konstruktør i klassen. I nogle tilfælde bruges det til at definere nogle standardværdier for klassevariablerne. Husk også, at et andet konstruktøropkald skal være den første sætning i kodeblokken.

Derudover bør der ikke være rekursive opkald, hvilket skaber en uendelig løkke. Lad os nu se på et eksempel på en konstruktorkæde i java-program.

pakke com.journaldev.constructor offentlig klasse Medarbejder {privat int id privat Strenge navn offentlig Medarbejder () {dette ('John Doe', 999) System.out.println ('Standard Medarbejder oprettet')} offentlig Medarbejder (int i) { denne ('John Doe', i) System.out.println ('Medarbejder oprettet med standardnavn')} offentlig medarbejder (String s, int i) {this.id = i this.name = s System.out.println ( 'Medarbejder oprettet')} offentlig statisk ugyldig hoved (String [] args) {Medarbejder emp = ny medarbejder () System.out.println (emp) Medarbejder emp1 = ny medarbejder (10) System.out.println (emp1) Medarbejder emp2 = ny medarbejder ('Pankaj', 20) System.out.println (emp2)} @ Override offentlig 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 klasse designmønster

  • Klassemedlem (ivrig initialiseringsmetode):

  1. Lav først en privat konstant statisk forekomst af en singleton-klasse.

  2. Skriv derefter en statisk metode, der returnerer objektet for en singleton-klasse, som vi oprettede som en klassemedlemsinstans.

    vende et tal i python
  3. Det er muligt at markere et statisk medlem som offentligheden for at få adgang til konstant statisk forekomst direkte.

  4. Singleton-klassen varierer fra en normal Java-klasse med hensyn til instantiering. I en normal klasse bruges en konstruktør, men til singleton-klasse bruger vi metoden get Instance ().

  • Klassemedlem (Lazy Initialization Method):

  1. Start først en konstruktør som privat.

  2. Opret derefter en privat statisk forekomst af denne singleton-klasse. Husk at IKKE instantiere det.

  3. Skriv derefter en statisk metode, der kontrollerer det statiske instansmedlem for null og initierer forekomsten. Endelig returnerer det et objekt fra singleton-klassen.

  • Klassemedlem (Lazy Initialization with double lock Method):

Overvej to tråde, der kører, hvor begge kommer ind i 'hvis' -sætningen samtidigt, mens forekomsten er nul. Hvor går den ene tråd ind i en synkroniseret blok for at oprette en forekomst, mens den anden er blokeret. Da den første tråd befinder sig i den synkroniserede blok, opretter tråden i køen et andet singleton-objekt. Bemærk, at når den anden tråd går ind i en synkroniseret blok, kontrollerer den ikke, om forekomsten ikke er nul.

  • Brug af indlejret indre klasse (Lazy Load-metode):

Her er det baseret på Java Language Specifications (JLS). Java Virtual Machine indlæser kun statiske data-medlemmer efter behov. Således indlæses Singleton-klassen først af JVM. Derfor er der ikke noget statisk datamedlem i en klasse

Singleton Class Holder indlæser ikke SINGLE_INSTANCE. Når vi påberåber os getIntance-metoden, sker kun dette. JLS garanterer udførelsen af ​​klassens initialisering. En bestemmelse til eksplicit synkronisering på statisk getInstance () -metode til indlæsning og initialisering. Da initialiseringen skaber den statiske variabel SINGLE_INSTANCE på en sekventiel måde, vil alle samtidige påkald af getInstance () komme tilbage det samme uden synkroniseringsomkostninger.

  • Ved at bruge Enums

Ikke alle ovenstående fremgangsmåder er komplette løsninger i alle tilfælde. Flere forekomster af ovenstående implementeringer kan oprettes ved hjælp af refleksion. I begge scenarier kan vi omgå den private konstruktør og oprette flere forekomster. Derfor er en ny tilgang at oprette en singleton-klasse ved hjælp af enums. Da enums-felter er kompilerede tidskonstanter, er de forekomster af deres enum-type. De konstrueres, når der refereres til enumtype for første gang.

Med dette kommer vi til slutningen af ​​Private Constructor i Java-artiklen. Jeg håber, du har fået en forståelse af private konstruktører, og hvordan de kan bruges i Java.

Tjek af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.

c ++ hvordan man bruger navneområder

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne “Java Tutorial” -blog, og vi vender tilbage til dig hurtigst muligt.