Jak implementovat soukromý konstruktor v Javě

Tento článek vám poskytne podrobné a komplexní znalosti Private Constructor v Javě a jeho použití s ​​příklady.

Konstruktéři se používají k inicializaci stavu objektu. Podobně jako metody může konstruktor také obsahovat kolekci příkazů, které nelze nazvat nic jiného než pokyny. V tomto článku budeme diskutovat o Private Constructor v v následujícím pořadí:

Úvod do konstruktoru v Javě

Konstruktory jsou prováděny v době vytváření objektu. Abyste lépe porozuměli konstruktoru a jeho aplikacím, pomyslete na krabici jako na třídu. Předpokládá se, že třída Box má nějaké proměnné třídy (tj. Délku, šířku a výšku). V době vytváření svého objektu (tj. Box existuje v paměti počítače), tedy může existovat box bez definované hodnoty pro jeho rozměrové veličiny.





Je zřejmé, že ne.

Proto je zaveden konstruktor, který při vytváření objektů přiřazuje hodnoty proměnným třídy. To může explicitně provést programátor nebo samotná Java. Když to udělá samotná Java, nazývá se to jako výchozí konstruktor.



Je nutné si uvědomit, že k jakékoli metodě, která má specifikátor přístupu poskytovaný kodérem konstruktoru, který je soukromý, lze přistupovat pouze uvnitř samotné třídy.

Soukromý konstruktor v Javě

Singleton Class

Ze samotného názvu můžeme třídu nazvat singleton, pokud omezuje počet objektů dané třídy na jeden. Třída v takových případech nemůže mít více než jeden objekt. Třídy singleton jsou vyčerpávajícím způsobem využívány v konceptech, jako je síťové připojení a připojení k databázi. Singleton třída je soukromá třída .



Musí existovat jiný způsob, jak extrahovat instanci třídy, a návratová metoda, která načte výsledek. Níže je výstižná ilustrace toho samého. První piktogram zobrazuje pravděpodobný výsledek, kde se hodnota „a.x“ rovná 20 a hodnota „b.x“ také 20. V kódu, zatímco definujeme singletonovou soukromou třídu, k jejím konstruktorům nelze přistupovat mimo třídu.

Hodnota a.x = 20

Hodnota b.x = 20

// Program Java k předvedení implementace vzoru Singleton // pomocí soukromých konstruktorů. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // private constructor can't be accessed outside the class private MySingleton () {} // Factory method to provide the users with instances static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () návratová instance}} // Třída třídy ovladače Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Hodnota ax =' + ax) System.out.println ('Hodnota bx =' + bx)}}

Dopad soukromého konstruktoru v Javě

Soukromé konstruktory nemají přístup k odvozeným třídám z jiné třídy. Musíme tedy dát veřejnou funkci, která volá soukromý konstruktor. V případě, že objekt není inicializován, nebo musíme poslat zpět instanci objektu, pokud byl inicializován. To je obzvláště užitečné pro objekty, které nelze inicializovat. Soukromý konstruktor se používá v následujících případech:

  • Příslušné třídy, které mají pouze statické metody a členy.
  • Specifické třídy, které mají pouze široce používané statické konečné členy (konstanty).
  • Začlenit singletony.
  • Začlenit tovární metody.

Využít výčty, které jsou typově bezpečné.

Řetězení vnitřního konstruktéra

Chaining internal constructor is when a constructor calls another constructor of the same class then it can be referred to as constructor chaining. Je naší povinností použít toto klíčové slovo k volání jiného konstruktoru třídy. V některých případech se používá k definování některých výchozích hodnot proměnných třídy. Pamatujte také, že prvním příkazem v bloku kódu musí být jiné volání konstruktoru.

Kromě toho by neměla být rekurzivní volání, která vytvoří nekonečnou smyčku. Pojďme se nyní podívat na příklad řetězení konstruktorů v programu Java.

balíček com.journaldev.constructor veřejná třída Zaměstnanec {private int id private Název řetězce public Employee () {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 = new Employee ('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 Design Pattern

  • Člen na úrovni třídy (Eager Initialization Method):

  1. Nejprve vytvořte soukromou konstantní statickou instanci třídy singleton.

  2. Poté napište statickou metodu, která vrátí objekt třídy singleton, kterou jsme vytvořili jako instanci člena třídy.

  3. Je možné označit statický člen jako veřejný pro přímý přístup ke konstantní statické instanci.

  4. Třída singleton se liší od běžné třídy Java, pokud jde o vytvoření instance. V normální třídě se používá konstruktor, ale pro třídu singleton používáme metodu get Instance ().

  • Člen na úrovni třídy (Lazy Initialization Method):

  1. Nejprve spusťte konstruktor jako soukromý.

  2. Pak vytvořte soukromou statickou instanci této třídy singleton. Mějte na paměti, že to NENÍ instancí.

  3. Potom napište statickou metodu, která zkontroluje hodnotu člena statické instance na hodnotu null a iniciuje instanci. Nakonec vrátí objekt třídy singleton.

  • Člen na úrovni třídy (Lazy Initialization with double lock Method):

Zvažte spuštění dvou podprocesů, kde se obě současně dostanou dovnitř příkazu „if“, zatímco instance má hodnotu null. Kde jedno vlákno přejde do synchronizovaného bloku k vytvoření instance, zatímco druhé je blokováno. Protože první vlákno je umístěno v synchronizovaném bloku, vlákno ve frontě vytvoří další singletonový objekt. Vezměte prosím na vědomí, že když druhé vlákno vstupuje do synchronizovaného bloku, nekontroluje, zda má instance nenulovou hodnotu.

rozdíl mezi rozhraním a třídou v Javě
  • Použití vnořené vnitřní třídy (metoda Lazy Load):

Zde je založen na specifikacích jazyka Java (JLS). Virtuální stroj Java načte statické datové členy pouze na vyžádání. Třída Singleton se tedy nejprve načte JVM. Proto ve třídě není žádný statický datový člen

Držitel třídy Singleton nenačte SINGLE_INSTANCE. Když vyvoláme metodu getIntance, dojde pouze k tomuto. JLS zaručuje provedení inicializace třídy. Zřízení explicitní synchronizace na statické metodě getInstance () pro načítání a inicializaci. Protože inicializace vytváří statickou proměnnou SINGLE_INSTANCE sekvenčním způsobem, všechna souběžná vyvolání metody getInstance () se vrátí stejně bez režie synchronizace.

  • Pomocí Enums

Ne všechny výše uvedené přístupy jsou ve všech případech úplným řešením. Více odrazů výše uvedených implementací lze vytvořit pomocí reflexe. V obou scénářích můžeme obejít soukromý konstruktor a vytvořit více instancí. Proto je novým přístupem vytvoření třídy singleton pomocí výčtu. Protože pole výčtu jsou kompilované časové konstanty, jsou instancemi jejich typu výčtu. Jsou zkonstruovány při prvním odkazu na typ výčtu.

S tímto se dostáváme na konec článku Private Constructor in Java. Doufám, že jste porozuměli soukromým konstruktérům a jejich použití v Javě.

Podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými jávskými rámci, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu „Java Tutorial“ a my se vám ozveme co nejdříve.