Hoe Private Constructor in Java te implementeren



Dit artikel geeft u een gedetailleerde en uitgebreide kennis van Private Constructor in Java en het gebruik ervan met voorbeelden.

Constructeurs worden gebruikt om de toestand van een object te initialiseren. Net als bij methoden kan een constructor ook een verzameling instructies bevatten, die niets anders dan instructies kunnen worden genoemd. In dit artikel bespreken we Private Constructor in in de volgende volgorde:

Inleiding tot Constructor in Java

Constructors worden uitgevoerd op het moment dat het object wordt gemaakt. Om een ​​beter begrip te krijgen van de constructor en zijn toepassingen, moet u een box zien als een klasse. Aangenomen wordt dat een Box-klasse enkele klassevariabelen heeft (d.w.z. lengte, breedte en hoogte). Echter, op het moment dat het object wordt gemaakt (d.w.z. Box bestaat in het computergeheugen), kan er ook een box bestaan ​​zonder waarde gedefinieerd voor zijn dimensionale hoeveelheden.





Natuurlijk niet.

hoe php 7 op windows 10 te installeren

Daarom wordt een constructor geïntroduceerd om waarden toe te wijzen aan klassevariabelen bij het maken van een object. Dit kan expliciet worden gedaan door de programmeur of door Java zelf. Wanneer het door Java zelf wordt gedaan, wordt het een standaardconstructor genoemd.



Het is absoluut noodzakelijk om te begrijpen dat elke methode die een toegangsspecificatie heeft die door de coder aan de constructor wordt verstrekt en die privé is gemaakt, alleen toegankelijk is binnen de klasse zelf.

Particuliere constructeur in Java

Singleton-klasse

Uit de naam zelf kunnen we een klasse een singleton noemen als deze het aantal objecten van die klasse tot één beperkt. Een klasse kan in dergelijke gevallen niet meer dan één enkel object hebben. De singleton-klassen worden uitputtend gebruikt in concepten als netwerken en databaseconnectiviteit. Singleton-klasse is een privéles .



Er moet een andere manier zijn om de instantie van de klasse te extraheren en een retourmethode om het resultaat op te halen. Hieronder is een treffende illustratie van hetzelfde. Het eerste pictogram geeft het waarschijnlijke resultaat weer waarbij de waarde van 'a.x' gelijk is aan 20 en de waarde van 'b.x' ook 20 oplevert. Hoewel we in de code de singleton private class definiëren, zijn de constructors ervan niet toegankelijk buiten de class.

Waarde van a.x = 20

Waarde van b.x = 20

// Java-programma om de implementatie van Singleton // -patroon te demonstreren met behulp van privéconstructors. import java.io. * class MySingleton {statische MySingleton instance = null public int x = 10 // private constructor kan niet worden benaderd buiten de class private MySingleton () {} // Fabrieksmethode om de gebruikers te voorzien van instances static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Driver Class class Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Waarde van ax =' + ax) System.out.println ('Waarde van bx =' + bx)}}

Impact van Private Constructor in Java

De private constructors hebben geen toegang tot afgeleide klassen van een andere klasse. We moeten dus een publieke functie geven, die de private constructor aanroept. In het geval dat het object niet is geïnitialiseerd, of we moeten een exemplaar terugsturen naar het object als het was geïnitialiseerd. Dit is vooral erg handig voor objecten die niet kunnen worden geïnitialiseerd. Een private constructor wordt gebruikt in de volgende gevallen:

  • De respectievelijke klassen, die alleen statische methoden en leden hebben.
  • De specifieke klassen, die alleen veel gebruik hebben gemaakt van statische eindleden (constanten).
  • Singletons opnemen.
  • Om de fabrieksmethoden op te nemen.

Om opsommingen te gebruiken die type-safe zijn.

Interne constructeursketting

Interne constructorketting is wanneer een constructor een andere constructor van dezelfde klasse aanroept, dan kan dit constructorketting worden genoemd. Het is onze plicht om dit sleutelwoord te gebruiken om een ​​andere constructor van de klasse aan te roepen. In sommige gevallen wordt het gebruikt om enkele standaardwaarden van de klassevariabelen te definiëren. Houd er ook rekening mee dat een andere constructor-aanroep de eerste instructie in het codeblok moet zijn.

__init__ python 3

Bovendien mogen er geen recursieve aanroepen zijn, die een oneindige lus zullen creëren. Laten we nu eens kijken naar een voorbeeld van een constructorketting in het Java-programma.

pakket com.journaldev.constructor openbare klasse Werknemer {privé int id privé Tekenreeksnaam openbaar Werknemer () {this ('John Doe', 999) System.out.println ('Default Employee Created')} public Employee (int i) { this ('John Doe', i) System.out.println ('Employee Created with Default Name')} public Employee (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) Employee emp1 = new Employee (10) System.out.println (emp1) Employee emp2 = nieuwe werknemer ('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 Class ontwerppatroon

  • Klasse-niveau lid (enthousiaste initialisatiemethode):

  1. Maak eerst een privé constant statisch exemplaar van een singleton-klasse.

  2. Schrijf vervolgens een statische methode, die het object van een singleton-klasse retourneert, die we hebben gemaakt als een instantie van een klasse-lid.

  3. Het is mogelijk om een ​​statisch lid als publiek te markeren om rechtstreeks toegang te krijgen tot een constante statische instantie.

  4. De singleton-klasse verschilt van een normale Java-klasse in termen van instantiatie. In een normale klasse wordt een constructor gebruikt, maar voor de singleton-klasse gebruiken we de methode get Instance ().

  • Klasseniveau (Lazy Initialization Method):

  1. Start eerst een constructor als privé.

  2. Maak vervolgens een privé statisch exemplaar van deze singleton-klasse. Denk eraan om het NIET te instantiëren.

  3. Schrijf vervolgens een statische methode, die het statische instantie-lid op null controleert en de instantie initieert. Ten slotte retourneert het een object van de singleton-klasse.

  • Het lid op klasniveau (luie initialisatie met dubbele vergrendelingsmethode):

Overweeg twee lopende threads waarbij beide gelijktijdig in de 'if' -instructie komen terwijl de instantie null is. Waar de ene thread in een gesynchroniseerd blok gaat om een ​​instantie te maken, terwijl de andere wordt geblokkeerd. Omdat de eerste thread zich in het gesynchroniseerde blok bevindt, maakt de thread in de wachtrij een ander singleton-object aan. Houd er rekening mee dat wanneer de tweede thread een gesynchroniseerd blok binnengaat, deze niet kan controleren of de instantie niet nul is.

  • Met behulp van geneste Inner class (Lazy Load-methode):

Hier is het gebaseerd op Java-taalspecificaties (JLS). De Java Virtual Machine laadt statische gegevensleden alleen op aanvraag. De klasse Singleton wordt dus als eerste geladen door de JVM. Daarom is er geen statisch gegevenslid in een klasse

De Singleton Class Holder laadt SINGLE_INSTANCE niet. Wanneer we de methode getIntance aanroepen, gebeurt alleen dit. JLS garandeert de uitvoering van de initialisatie van de klasse. Een voorziening voor expliciete synchronisatie op de statische methode getInstance () voor laden en initialiseren. Aangezien de initialisatie de statische variabele SINGLE_INSTANCE op een sequentiële manier creëert, zullen alle gelijktijdige aanroepen van getInstance () hetzelfde terugkomen zonder synchronisatieoverhead.

  • Door Enums te gebruiken

Niet alle bovenstaande benaderingen zijn in alle gevallen complete oplossingen. Met behulp van reflectie kunnen meerdere exemplaren van de bovenstaande implementaties worden gemaakt. In beide scenario's kunnen we de privéconstructor omzeilen en meerdere instanties maken. Daarom is een nieuwe benadering het maken van een singleton-klasse met behulp van enums. Aangezien enums-velden gecompileerde tijdconstanten zijn, zijn het instanties van hun enum-type. Ze worden gemaakt wanneer voor het eerst naar het enum-type wordt verwezen.

Hiermee komen we aan het einde van het artikel Private Constructor in Java. Ik hoop dat je begrip hebt van Private Constructors en hoe ze in Java kunnen worden gebruikt.

Bekijk de door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De training- en certificeringcursus Java J2EE en SOA van Edureka is bedoeld voor studenten en professionals die Java-ontwikkelaar willen worden. De cursus is bedoeld om u een voorsprong te geven in het programmeren van Java en u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.

inkoopmanagement in projectmanagement

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van deze 'Java Tutorial' -blog en we nemen zo snel mogelijk contact met u op.