So implementieren Sie Private Constructor in Java

Dieser Artikel vermittelt Ihnen detaillierte und umfassende Kenntnisse über Private Constructor in Java und dessen Verwendung anhand von Beispielen.

Konstruktoren werden verwendet, um den Status eines Objekts zu initialisieren. Ähnlich wie bei Methoden kann ein Konstruktor auch eine Sammlung von Anweisungen enthalten, die nur als Anweisungen bezeichnet werden können. In diesem Artikel werden wir Private Constructor in diskutieren in der folgenden Reihenfolge:

Einführung in den Konstruktor in Java

Konstruktoren werden zum Zeitpunkt der Objekterstellung ausgeführt. Stellen Sie sich eine Box als Klasse vor, um den Konstruktor und seine Anwendungen besser zu verstehen. Es wird angenommen, dass eine Box-Klasse einige Klassenvariablen aufweist (d. H. Länge, Breite und Höhe). Zum Zeitpunkt der Erstellung des Objekts (d. H. Box befindet sich im Arbeitsspeicher des Computers) kann jedoch eine Box existieren, für deren Dimensionsgrößen kein Wert definiert ist.



Offensichtlich nein.

Daher wird ein Konstruktor eingeführt, der Klassenvariablen bei der Objekterstellung Werte zuweist. Dies kann explizit vom Programmierer oder von Java selbst durchgeführt werden. Wenn es von Java selbst ausgeführt wird, wird es als Standardkonstruktor bezeichnet.

Es ist unbedingt zu verstehen, dass auf jede Methode, die über einen vom Codierer für den Konstruktor bereitgestellten Zugriffsspezifizierer verfügt, der privat gemacht wird, nur innerhalb der Klasse selbst zugegriffen werden kann.

Privater Konstruktor in Java

Singleton-Klasse

Aus dem Namen selbst können wir eine Klasse als Singleton bezeichnen, wenn dadurch die Anzahl der Objekte dieser Klasse auf eins beschränkt wird. Eine Klasse kann in solchen Fällen nicht mehr als ein einzelnes Objekt haben. Die Singleton-Klassen werden ausführlich in Konzepten wie Netzwerk und Datenbankkonnektivität verwendet. Singleton Klasse ist ein Privatunterricht .

Es muss eine andere Möglichkeit geben, die Instanz der Klasse zu extrahieren, und eine Rückgabemethode, um das Ergebnis zurückzurufen. Unten ist eine treffende Illustration davon. Das erste Piktogramm zeigt das wahrscheinliche Ergebnis, bei dem der Wert von 'a.x' gleich 20 ist und der Wert von 'b.x' ebenfalls 20 ergibt. Während wir im Code die private Singleton-Klasse definieren, kann auf die Konstruktoren außerhalb der Klasse nicht zugegriffen werden.

Wert von a.x = 20

Wert von b.x = 20

// Java-Programm zur Demonstration der Implementierung des // Singleton-Musters mit privaten Konstruktoren. import java.io. * class MySingleton {statische MySingleton-Instanz = null public int x = 10 // Auf den privaten Konstruktor kann nicht außerhalb der Klasse private MySingleton () zugegriffen werden. {} // Factory-Methode, um den Benutzern statische öffentliche MySingleton-Instanzen bereitzustellen getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Treiberklassenklasse Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Wert von ax =' + ax) System.out.println ('Wert von bx =' + bx)}}

Auswirkungen des privaten Konstruktors in Java

Die privaten Konstruktoren können nicht auf abgeleitete Klassen einer anderen Klasse zugreifen. Wir müssen also eine öffentliche Funktion angeben, die den privaten Konstruktor aufruft. Falls das Objekt nicht initialisiert ist oder wir eine Instanz an das Objekt zurücksenden müssen, wenn es initialisiert wurde. Dies ist besonders nützlich für Objekte, die nicht initialisiert werden können. In den folgenden Fällen wird ein privater Konstruktor verwendet:

  • Die jeweiligen Klassen, die nur statische Methoden und Mitglieder haben.
  • Die spezifischen Klassen, die nur häufig verwendete statische Endelemente (Konstanten) verwendet haben.
  • Singletons einbauen.
  • Einbeziehung der Werksmethoden.

Verwendung von Aufzählungen, die typsicher sind.

Verkettung interner Konstruktoren

Interne Konstruktorkettung Wenn ein Konstruktor einen anderen Konstruktor derselben Klasse aufruft, kann dies als Konstruktorkettung bezeichnet werden. Es ist unsere Pflicht, dieses Schlüsselwort zu verwenden, um einen anderen Konstruktor der Klasse aufzurufen. In einigen Fällen werden einige Standardwerte der Klassenvariablen definiert. Beachten Sie auch, dass ein anderer Konstruktoraufruf die erste Anweisung im Codeblock sein muss.

Außerdem sollte es keine rekursiven Aufrufe geben, die eine Endlosschleife erzeugen. Schauen wir uns nun ein Beispiel für eine Konstruktorverkettung im Java-Programm an.

Paket com.journaldev.constructor öffentliche Klasse Employee {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('Standardangestellter erstellt')} public Employee (int i) { this ('John Doe', i) System.out.println ('Mitarbeiter mit Standardname erstellt')} öffentlicher Mitarbeiter (String s, int i) {this.id = i this.name = s System.out.println ( 'Mitarbeiter erstellt')} public static void main (String [] args) {Mitarbeiter emp = neuer Mitarbeiter () System.out.println (emp) Mitarbeiter emp1 = neuer Mitarbeiter (10) System.out.println (emp1) Mitarbeiter emp2 = neuer Mitarbeiter ('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 () {Rückgabewert} public void setName (String name) {this.name = name}}

Singleton Class Design Pattern

  • Mitglied auf Klassenebene (Eager Initialisierungsmethode):

  1. Erstellen Sie zunächst eine private konstante statische Instanz einer Singleton-Klasse.

    Zeichenfolge zu Java Util Datum
  2. Schreiben Sie dann eine statische Methode, die das Objekt einer Singleton-Klasse zurückgibt, die wir als Klassenmitgliedsinstanz erstellt haben.

  3. Es ist möglich, ein statisches Mitglied als öffentlich zu markieren, um direkt auf eine konstante statische Instanz zuzugreifen.

  4. Die Singleton-Klasse unterscheidet sich hinsichtlich der Instanziierung von einer normalen Java-Klasse. In einer normalen Klasse wird ein Konstruktor verwendet, aber für eine Singleton-Klasse verwenden wir die Methode get Instance ().

  • Mitglied auf Klassenebene (Lazy Initialization Method):

  1. Initiieren Sie zunächst einen Konstruktor als privat.

  2. Erstellen Sie dann eine private statische Instanz dieser Singleton-Klasse. Denken Sie daran, es NICHT zu instanziieren.

  3. Schreiben Sie dann eine statische Methode, die das statische Instanzmitglied auf null überprüft und die Instanz initiiert. Schließlich wird ein Objekt der Singleton-Klasse zurückgegeben.

  • Das Mitglied auf Klassenebene (Lazy Initialization with Double Lock Method):

Stellen Sie sich zwei Threads vor, die ausgeführt werden, wobei beide gleichzeitig in die if-Anweisung gelangen, während die Instanz null ist. Dabei geht ein Thread in einen synchronisierten Block, um eine Instanz zu erstellen, während der andere blockiert wird. Da sich der erste Thread im synchronisierten Block befindet, erstellt der Thread in der Warteschlange ein weiteres Singleton-Objekt. Beachten Sie, dass der zweite Thread beim Eintritt in einen synchronisierten Block nicht überprüft, ob die Instanz nicht null ist.

  • Verwenden der verschachtelten inneren Klasse (Lazy Load-Methode):

Hier basiert es auf Java Language Specifications (JLS). Die Java Virtual Machine lädt statische Datenelemente nur bei Bedarf. Daher wird die Singleton-Klasse zuerst von der JVM geladen. Daher gibt es in einer Klasse kein statisches Datenelement

Der Singleton-Klasseninhaber lädt SINGLE_INSTANCE nicht. Wenn wir die getIntance-Methode aufrufen, tritt nur dies auf. JLS garantiert die Ausführung der Initialisierung der Klasse. Eine Bestimmung für die explizite Synchronisierung der statischen Methode getInstance () zum Laden und Initialisieren. Da die Initialisierung die statische Variable SINGLE_INSTANCE sequentiell erstellt, werden alle gleichzeitigen Aufrufe von getInstance () ohne Synchronisationsaufwand gleich zurückgegeben.

  • Mit Enums

Nicht alle oben genannten Ansätze sind in allen Fällen vollständige Lösungen. Mithilfe von Reflection können mehrere Instanzen der oben genannten Implementierungen erstellt werden. In beiden Szenarien können wir den privaten Konstruktor umgehen und mehrere Instanzen erstellen. Daher besteht ein neuer Ansatz darin, eine Singleton-Klasse mithilfe von Aufzählungen zu erstellen. Da Aufzählungsfelder kompilierte Zeitkonstanten sind, sind sie Instanzen ihres Aufzählungstyps. Sie werden erstellt, wenn der Aufzählungstyp zum ersten Mal referenziert wird.

Damit kommen wir zum Ende des Private Constructor in Java-Artikels. Ich hoffe, Sie haben ein Verständnis für Private Constructors und deren Verwendung in Java.

Besuche die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.

Hast du eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich dieses 'Java Tutorial' -Blogs und wir werden uns so schnell wie möglich bei Ihnen melden.