Hur man implementerar privat konstruktör i Java



Den här artikeln ger dig en detaljerad och omfattande kunskap om Private Constructor i Java och används med exempel.

Konstruktörer används för att initialisera ett objekts tillstånd. På samma sätt som metoder kan en konstruktör också ha en samling uttalanden som bara kan kallas instruktioner. I den här artikeln kommer vi att diskutera Private Constructor i i följande ordning:

Introduktion till Constructor i Java

Konstruktörer körs när objektet skapas. För att få en bättre förståelse för konstruktören och dess applikationer, tänk bara på en ruta som en klass. En Box-klass antas ha vissa klassvariabler (dvs. längd, bredd och höjd). Vid tidpunkten för skapandet av objektet (dvs. Box finns i datorns minne) kan det emellertid finnas en ruta utan något värde definierat för dess dimensionella kvantiteter.





är svårt att lära sig

Självklart, nej.

Därför introduceras en konstruktör för att tilldela värden till klassvariabler vid objektskapande. Detta kan uttryckligen göras av programmeraren eller av Java själv. När det är gjort av Java kallas det som en standardkonstruktör.



Det är absolut nödvändigt att förstå att vilken metod som helst som har åtkomstspecifikator som tillhandahålls av kodaren till konstruktören, som görs privat, endast kan nås i själva klassen.

Privat konstruktör i Java

Singleton-klass

Från själva namnet kan vi kalla en klass en singleton om den begränsar antalet objekt i den klassen till ett. En klass kan inte ha mer än ett enda objekt i sådana fall. Singleton-klasserna används uttömmande i begrepp som nätverk och databasanslutning. Singleton-klassen är en privat klass .



Det måste finnas ett annat sätt att extrahera förekomsten av klassen och en returmetod för att hämta resultatet. Nedan följer en lämplig illustration av densamma. Den första piktografen visar det troliga resultatet där värdet av “a.x” motsvarar 20 och värdet av “b.x” också resulterar i 20. I koden, medan vi definierar singleton private class, kan konstruktörerna av den inte nås utanför klassen.

Värdet på a.x = 20

Värde på b.x = 20

// Java-program för att demonstrera implementering av Singleton // -mönster med privata konstruktörer. importera java.io. * klass MySingleton {statisk MySingleton-instans = null public int x = 10 // privat konstruktör kan inte nås utanför klass privat MySingleton () {} // Fabriksmetod för att ge användarna instanser statisk offentlig MySingleton getInstance () {if (instans == null) instans = ny MySingleton () returinstans}} // Förarklassklass Main {public static void main (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)}}

Effekten av privata konstruktörer i Java

De privata konstruktörerna har inte tillgång till härledda klasser från en annan klass. Således måste vi ge en offentlig funktion som kallar den privata konstruktören. Om objektet inte initialiseras eller så måste vi skicka tillbaka en instans till objektet om det initialiserades. Detta är särskilt användbart för objekt som inte kan initieras. En privat konstruktör används i följande fall:

  • De respektive klasserna, som bara har statiska metoder och medlemmar.
  • De specifika klasserna, som bara har använt statiska slutliga medlemmar (konstanter) i stor utsträckning.
  • Att införliva singletons.
  • Att integrera fabriksmetoderna.

Att använda uppräkningar som är typsäkra.

Intern konstruktorkedja

Intern konstruktorkedja är när en konstruktör anropar en annan konstruktör av samma klass, då kan den kallas konstruktorkedjning. Det är vår plikt att använda detta nyckelord för att ringa en annan konstruktör i klassen. I vissa fall används den för att definiera vissa standardvärden för klassvariablerna. Tänk också på att ett annat konstruktörsanrop måste vara det första uttalandet i kodblocket.

Dessutom bör det inte finnas rekursiva samtal, vilket skapar en oändlig slinga. Låt oss nu titta på ett exempel på en konstruktorkedjning i Java-programmet.

paket com.journaldev.constructor offentlig klass Anställd {privat int id privat Strängnamn offentlig anställd () {detta ('John Doe', 999) System.out.println ('Standard anställd skapad')} offentlig anställd (int i) { detta ('John Doe', i) System.out.println ('Anställd skapad med standardnamn')} offentlig anställd (String s, int i) {this.id = i this.name = s System.out.println ( 'Anställd skapad')} offentlig statisk ogiltig huvud (String [] args) {Anställd emp = ny anställd () System.out.println (emp) Anställd emp1 = ny anställd (10) System.out.println (emp1) Anställd emp2 = ny anställd ('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 (String name) {this.name = name}}

Singleton klassdesignmönster

  • Klassnivåmedlem (ivrig initialiseringsmetod):

  1. Gör först en privat, konstant statisk instans av en singleton-klass.

  2. Skriv sedan en statisk metod som returnerar objektet för en singleton-klass, som vi skapade som en klassmedlemsinstans.

  3. Det är möjligt att markera en statisk medlem som allmänheten för att få tillgång till konstant statisk instans direkt.

  4. Singleton-klassen varierar från en vanlig Java-klass när det gäller instantiering. I en normal klass används en konstruktör men för singleton-klass använder vi metoden get Instance ().

  • Klassnivåmedlem (Lazy Initialization Method):

  1. Starta först en konstruktör som privat.

  2. Skapa sedan en privat statisk instans av denna singleton-klass. Tänk på att INTE instantiera det.

  3. Skriv sedan en statisk metod som kontrollerar den statiska instansmedlemmen för null och initierar instansen. Slutligen returnerar det ett objekt från singleton-klassen.

  • Klassmedlemmen (Lazy Initialization with double lock Method):

Tänk på att två trådar körs där båda kommer in i ”if” -uttrycket samtidigt medan förekomsten är null. Där en tråd går in i ett synkroniserat block för att skapa en instans, medan den andra blockeras. Eftersom den första tråden finns i det synkroniserade blocket skapar tråden i kön ett annat singleton-objekt. Observera att när den andra tråden går in i ett synkroniserat block kan den inte kontrollera om förekomsten är icke-null.

  • Använda kapslad inre klass (Lazy Load-metod):

Här är det baserat på Java Language Specifications (JLS). Java Virtual Machine laddar endast statiska data-medlemmar på begäran. Således laddas Singleton-klassen först av JVM. Därför finns det ingen statisk datamedlem i en klass

Singleton klasshållare laddar inte SINGLE_INSTANCE. När vi åberopar getIntance-metoden inträffar bara detta. JLS garanterar genomförandet av klassens initialisering. En bestämmelse för uttrycklig synkronisering på statisk getInstance () -metod för laddning och initialisering. Eftersom initialiseringen skapar den statiska variabeln SINGLE_INSTANCE på ett sekventiellt sätt kommer alla samtidiga anrop av getInstance () att komma tillbaka samma utan synkroniseringsomkostnader.

Inte alla ovanstående tillvägagångssätt är kompletta lösningar i alla fall. Flera instanser av ovanstående implementeringar kan skapas med hjälp av reflektion. I båda scenarierna kan vi kringgå den privata konstruktören och skapa flera instanser. Därför är ett nytt tillvägagångssätt att skapa en singleton-klass genom att använda enums. Eftersom enumsfält sammanställs tidskonstanter är de förekomster av sin enumtyp. De konstrueras när enumtyp refereras för första gången.

Med detta kommer vi till slutet av Private Constructor i Java-artikeln. Jag hoppas att du fick förståelse för privata konstruktörer och hur de kan användas i Java.

Kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för studenter och yrkesverksamma som vill vara Java-utvecklare. Kursen är utformad för att ge dig ett försprång till Java-programmering och träna dig för både kärn- och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i denna “Java Tutorial” -blogg så återkommer vi till dig så snart som möjligt.