Ako implementovať súkromný konštruktor v Jave



Tento článok vám poskytne podrobné a komplexné vedomosti o nástroji Private Constructor v Jave a jeho použití s ​​príkladmi.

Konštruktéri sa používajú na inicializáciu stavu objektu. Podobne ako v prípade metód, aj konštruktor môže obsahovať zbierku príkazov, ktoré sa dajú nazvať iba inštrukciami. V tomto článku sa budeme zaoberať Private Constructor v v nasledujúcom poradí:

Úvod do programu Constructor v Jave

Konštruktory sa vykonávajú v čase vytvárania objektu. Ak chcete lepšie porozumieť konštruktoru a jeho aplikáciám, stačí si predstaviť krabicu ako triedu. Predpokladá sa, že trieda Box obsahuje niektoré premenné triedy (t.j. dĺžka, šírka a výška). Avšak v čase vytvárania svojho objektu (tj. Box existuje v pamäti počítača), môže teda existovať aj box, ktorý nemá pre svoje rozmerové veličiny definovanú žiadnu hodnotu.





Je zrejmé, že nie.

Preto je zavedený konštruktor, ktorý priraďuje hodnoty premenným triedy pri vytváraní objektu. To môže urobiť výslovne programátor alebo samotná Java. Ak to urobí samotná Java, nazýva sa to ako predvolený konštruktor.



Je nevyhnutné si uvedomiť, že ku každej metóde, ktorá má špecifikátor prístupu poskytovaný kódovačom konštruktoru, ktorý je označený ako súkromný, je možné pristupovať iba vo vnútri samotnej triedy.

Súkromný konštruktér v Jave

Trieda Singleton

Už zo samotného názvu môžeme triedu nazvať singletonom, ak obmedzuje počet objektov tejto triedy na jeden. Trieda v takýchto prípadoch nemôže mať viac ako jeden objekt. Triedy singleton sa vyčerpávajúco používajú v konceptoch, ako sú sieťové pripojenie a pripojenie k databáze. Singletonova trieda je a súkromná trieda .



Musí existovať iný spôsob, ako extrahovať inštanciu triedy, a metóda vrátenia, ktorá vráti výsledok. Nižšie je uvedená trefná ilustrácia toho istého. Prvý piktogram zobrazuje pravdepodobný výsledok, pri ktorom sa hodnota „a.x“ rovná 20 a hodnota „b.x“ vedie tiež k 20. V kóde, zatiaľ čo definujeme singletonovú súkromnú triedu, nie je možné pristupovať k jej konštruktorom mimo triedy.

Hodnota a.x = 20

Hodnota b.x = 20

// Program Java na demonštráciu implementácie vzoru Singleton // pomocou súkromných konštruktorov. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // private constructor can't be accessed outside the class private MySingleton () {} // Továrna metóda poskytujúca používateľom inštancie static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Trieda triedy drivera 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 súkromného konštruktora v Jave

Súkromní konštruktéri nemôžu získať prístup k odvodeným triedam z inej triedy. Musíme teda dať verejnú funkciu, ktorá volá súkromný konštruktor. V prípade, že objekt nie je inicializovaný, alebo musíme poslať späť inštanciu objektu, ak bol inicializovaný. Toto je obzvlášť užitočné pre objekty, ktoré nie je možné inicializovať. Súkromný konštruktor sa používa v nasledujúcich prípadoch:

  • Príslušné triedy, ktoré majú iba statické metódy a členov.
  • Konkrétne triedy, ktoré používajú iba statické konečné členy (konštanty).
  • Začleniť singletons.
  • Zahrnúť továrenské metódy.

Využiť enumerácie, ktoré sú typovo bezpečné.

Reťazenie interného konštruktéra

Reťazenie interného konštruktora je, keď konštruktor zavolá iného konštruktora rovnakej triedy, potom ho možno označiť ako reťazenie konštruktora. Je našou povinnosťou použiť toto kľúčové slovo na volanie iného konštruktora triedy. V niektorých prípadoch sa používa na definovanie niektorých predvolených hodnôt premenných triedy. Majte tiež na pamäti, že prvým volaním v bloku kódu musí byť iné volanie konštruktora.

Okrem toho by nemali existovať rekurzívne volania, ktoré vytvoria nekonečnú slučku. Pozrime sa teraz na príklad reťazenia konštruktorov v programe Java.

balíček com.journaldev.constructor verejná trieda Zamestnanec {private int id private Názov reťazca 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}}

Dizajnový vzor triedy Singleton

  • Člen na úrovni triedy (metóda Eager Initialization):

  1. Najskôr vytvorte súkromnú konštantnú statickú inštanciu triedy singleton.

  2. Potom napíš statickú metódu, ktorá vráti objekt triedy singleton, ktorú sme vytvorili ako inštanciu člena triedy.

  3. Je možné označiť statický člen ako verejný pre priamy prístup k konštantnej statickej inštancii.

  4. Trieda singleton sa z hľadiska inštancie líši od bežnej triedy Java. V normálnej triede sa používa konštruktor, ale pre triedu singleton používame metódu get Instance ().

  • Člen na úrovni triedy (metóda Lazy Initialization):

  1. Najskôr inicializujte konštruktéra ako súkromného.

  2. Potom vytvorte súkromnú statickú inštanciu tejto triedy singleton. Majte na pamäti, že NIE JE to inštancia.

  3. Potom napíšte statickú metódu, ktorá skontroluje, či má člen statickej inštancie hodnotu null, a iniciuje inštanciu. Nakoniec vráti objekt triedy singleton.

  • Člen na úrovni triedy (Lazy Initialization with double lock Method):

Zvážte spustenie dvoch vlákien, kde sa obe dostanú dovnútra príkazu „if“, zatiaľ čo inštancia je nulová. Kde jedno vlákno prechádza do synchronizovaného bloku na vytvorenie inštancie, zatiaľ čo druhé je blokované. Keď sa prvé vlákno nachádza v synchronizovanom bloku, vlákno vo fronte vytvorí ďalší singletonový objekt. Upozorňujeme, že keď druhé vlákno vstupuje do synchronizovaného bloku, nedokáže skontrolovať, či má inštancia nenulovú hodnotu.

informatický návod pre začiatočníkov pdf
  • Používanie vnorenej vnútornej triedy (metóda Lazy Load):

Tu je založený na špecifikácii jazyka Java (JLS). Virtuálny počítač Java načítava členov statických údajov iba na požiadanie. Teda trieda Singleton sa načíta najskôr JVM. Preto v triede nie je žiadny člen statických údajov

Držiteľ triedy Singleton nenačíta SINGLE_INSTANCE. Keď vyvoláme metódu getIntance, nastane iba toto. Spoločnosť JLS zaručuje vykonanie inicializácie triedy. Rezerva na explicitnú synchronizáciu so statickou metódou getInstance () pre načítanie a inicializáciu. Pretože inicializácia vytvára statickú premennú SINGLE_INSTANCE postupne, všetky súbežné vyvolania metódy getInstance () sa vrátia rovnako bez réžie synchronizácie.

  • Použitím Enums

Nie všetky vyššie uvedené prístupy sú vo všetkých prípadoch úplným riešením. Viaceré inštancie vyššie uvedených implementácií je možné vytvoriť pomocou reflexie. V obidvoch scenároch môžeme obísť súkromného konštruktora a vytvoriť viac inštancií. Preto je novým prístupom vytvorenie triedy singleton pomocou enumov. Pretože polia enums sú kompilované časové konštanty, sú inštanciami ich typu enum. Sú zostrojené, keď sa na enum typ odkazuje prvýkrát.

Týmto sa dostávame na koniec článku Private Constructor in Java. Dúfam, že ste porozumeli súkromným konštruktorom a ich použitiu v prostredí Java.

Pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je určený pre študentov a profesionálov, ktorí chcú byť vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi rámcami Java, ako je Hibernate & Spring.

Máte na nás otázku? Uveďte to, prosím, v sekcii komentárov v tomto blogu „Java Tutorial“ a my sa vám ozveme čo najskôr.