Hvordan implementere Private Constructor i Java



Denne artikkelen vil gi deg en detaljert og omfattende kunnskap om Private Constructor i Java, og den brukes med eksempler.

Konstruktører brukes til å initialisere et objekts tilstand. I likhet med metoder kan en konstruktør også ha en samling utsagn, som ikke kan kalles annet enn instruksjoner. I denne artikkelen vil vi diskutere Private Constructor i i følgende rekkefølge:

Introduksjon til Constructor i Java

Konstruktører utføres på tidspunktet for oppretting av objekt. For å få en bedre forståelse av konstruktøren og dens applikasjoner, bare tenk på en boks som en klasse. En boksklasse antas å ha noen klassevariabler (dvs. lengde, bredde og høyde). På tidspunktet for oppretting av objektet (dvs. boksen eksisterer i datamaskinens minne), kan det imidlertid eksistere en boks uten verdi definert for dimensjonale størrelser.





Åpenbart, nei.

Derfor blir en konstruktør introdusert for å tilordne verdier til klassevariabler ved oppretting av objekt. Dette kan eksplisitt gjøres av programmereren eller av Java selv. Når det er gjort av Java selv, blir det betegnet som en standardkonstruktør.



Det er viktig å forstå at en hvilken som helst metode, som har tilgangsspesifikator gitt av koderen til konstruktøren, som er gjort privat, bare kan nås i selve klassen.

Privat konstruktør i Java

Singleton-klasse

Fra selve navnet kan vi kalle en klasse for en singleton hvis den begrenser antall objekter i den klassen til en. En klasse kan ikke ha mer enn ett enkelt objekt i slike tilfeller. Singleton-klassene brukes uttømmende i konsepter som nettverk og databasetilkobling. Singleton-klassen er en privat klasse .



Det må være en annen måte å trekke ut forekomsten av klassen og en returmetode for å hente tilbake resultatet. Nedenfor er en passende illustrasjon av det samme. Den første piktogrammet viser det sannsynlige resultatet der verdien av “a.x” tilsvarer 20 og verdien av “b.x” også resulterer i 20. Mens vi definerer singleton private class i koden, kan ikke konstruktørene av den fås utenfor klassen.

Verdien av a.x = 20

Verdien av b.x = 20

hvordan du skriver en skanner i java
// Java-program for å demonstrere implementering av Singleton // mønster ved bruk av private konstruktører. importere java.io. * klasse MySingleton {statisk MySingleton-forekomst = null offentlig int x = 10 // privat konstruktør kan ikke nås utenfor klassen privat MySingleton () {} // Fabrikkmetode for å gi brukerne forekomster statisk offentlig MySingleton getInstance () {if (forekomst == null) forekomst = ny MySingleton () returforekomst}} // Førerklasse klasse Hoved {offentlig statisk ugyldig hoved (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Verdi av ax =' + ax) System.out.println ('Value of bx =' + bx)}}

Virkningen av Private Constructor i Java

De private konstruktørene har ikke tilgang til avledede klasser fra en annen klasse. Dermed må vi gi en offentlig funksjon, som kaller den private konstruktøren. I tilfelle initialiseres ikke objektet, eller vi må sende en forekomst tilbake til objektet hvis det ble initialisert. Dette er spesielt veldig nyttig for objekter som ikke kan initialiseres. En privat konstruktør brukes i følgende tilfeller:

  • De respektive klassene, som bare har statiske metoder og medlemmer.
  • De spesifikke klassene, som bare har mye brukt statiske endelige medlemmer (konstanter).
  • Å innlemme singler.
  • Å innlemme fabrikkmetodene.

Å bruke oppregninger som er typesikre.

Intern konstruktorkjetting

Intern konstruktorkjetting er når en konstruktør kaller en annen konstruktør av samme klasse, så kan den refereres til som konstruktorkjetting. Det er vår plikt å bruke dette nøkkelordet til å ringe til en annen konstruktør i klassen. I noen tilfeller brukes den til å definere noen standardverdier for klassevariablene. Husk også at en annen konstruktøranrop må være den første setningen i kodeblokken.

I tillegg bør det ikke være rekursive samtaler, noe som vil skape en uendelig løkke. La oss nå se på et eksempel på en konstruktorkjetting i java-program.

pakke com.journaldev.constructor offentlig klasse Ansatt {privat int id privat Strengnavn offentlig ansatt () {dette ('John Doe', 999) System.out.println ('Standard ansatt opprettet')} offentlig ansatt (int i) { dette ('John Doe', i) System.out.println ('Employee Created with Default Name')} offentlig ansatt (String s, int i) {this.id = i this.name = s System.out.println ( 'Medarbeider opprettet')} offentlig statisk ugyldig hoved (String [] args) {Ansatt emp = ny ansatt () System.out.println (emp) Ansatt emp1 = ny ansatt (10) System.out.println (emp1) Ansatt emp2 = ny ansatt ('Pankaj', 20) System.out.println (emp2)} @ Override 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 (Streng name) {this.name = name}}

Singleton klasse designmønster

  • Klassemedlem (ivrig initialiseringsmetode):

  1. Først må du lage en privat, konstant statisk forekomst av en singleton-klasse.

  2. Skriv deretter en statisk metode som returnerer objektet til en singleton-klasse, som vi opprettet som en klassemedlemforekomst.

  3. Det er mulig å markere et statisk medlem som publikum for å få tilgang til konstant statisk forekomst direkte.

  4. Singleton-klassen varierer fra en vanlig Java-klasse når det gjelder instantiering. I en normal klasse brukes en konstruktør, men for singleton-klassen bruker vi get Instance () -metoden.

  • Klassemedlem (Lazy Initialization Method):

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

  2. Opprett deretter en privat statisk forekomst av denne singleton-klassen. Husk å IKKE instantiere det.

  3. Deretter skriver du en statisk metode som kontrollerer medlemmet for statisk forekomst for null og starter forekomsten. Til slutt returnerer den et objekt fra singleton-klassen.

  • Klassemedlemmen (Lazy Initialization with double lock Method):

Vurder to tråder som kjører der begge kommer inn i 'hvis' -uttalelsen samtidig mens forekomsten er null. Hvor går den ene tråden inn i en synkronisert blokk for å opprette en forekomst, mens den andre er blokkert. Når den første tråden befinner seg i den synkroniserte blokken, oppretter tråden i køen et annet singleton-objekt. Vær oppmerksom på at når den andre tråden går inn i en synkronisert blokk, kontrollerer den ikke om forekomsten ikke er null.

  • Ved hjelp av nestet indre klasse (Lazy Load-metode):

Her er det basert på Java Language Specifications (JLS). Java Virtual Machine laster bare statiske data-medlemmer på forespørsel. Dermed lastes Singleton-klassen først av JVM. Derfor er det ikke noe statisk datamedlem i en klasse

Singleton Class Holder laster ikke inn SINGLE_INSTANCE. Når vi påkaller getIntance-metoden, skjer bare dette. JLS garanterer utførelsen av klassens initialisering. En bestemmelse for eksplisitt synkronisering på statisk getInstance () -metode for lasting og initialisering. Når initialiseringen skaper den statiske variabelen SINGLE_INSTANCE på en sekvensiell måte, vil alle samtidige påkallinger av getInstance () komme tilbake det samme uten synkronisering overhead.

  • Ved å bruke Enums

Ikke alle ovennevnte tilnærminger er komplette løsninger i alle tilfeller. Flere forekomster av implementeringene ovenfor kan opprettes ved hjelp av refleksjon. I begge scenariene kan vi omgå den private konstruktøren og opprette flere forekomster. Derfor er en ny tilnærming å lage en singleton-klasse ved å bruke enums. Ettersom enums-felt er sammensatt av tidskonstanter, er de forekomster av enum-typen. De konstrueres når det refereres til enumtype for første gang.

Med dette kommer vi til slutten av Private Constructor i Java-artikkelen. Jeg håper du fikk forståelse for private konstruktører og hvordan de kan brukes i Java.

Sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Java Tutorial' -bloggen, så kommer vi tilbake til deg så snart som mulig.