Hogyan valósítsuk meg a privát konstruktort a Java-ban



Ez a cikk részletes és átfogó ismereteket nyújt a Java Private Constructor-ról, és példákkal együtt felhasználja.

Kivitelezők felhasználják az objektum állapotának inicializálására. A metódusokhoz hasonlóan egy konstruktor állíthat össze olyan utasítások gyűjteményét is, amelyeket nem lehet másnak nevezni, csak utasításoknak. Ebben a cikkben a Private Constructor-t tárgyaljuk a következő sorrendben:

Bevezetés a Java Constructor-ba

A kivitelezőket az objektum létrehozásakor hajtják végre. A konstruktor és alkalmazásainak jobb megértése érdekében gondoljon csak egy dobozra, mint osztályra. Feltételezzük, hogy egy Box osztály rendelkezik néhány osztályváltozóval (azaz hossz, szélesség és magasság). Az objektum létrehozásának idején (vagyis a doboz létezik a számítógép memóriájában) létezhet tehát egy doboz, amelynek méretei nincsenek meghatározva.





Nyilvánvalóan nem.

Ezért egy konstruktort vezetnek be, hogy az objektum létrehozásakor értékeket rendeljen az osztályváltozókhoz. Ezt kifejezetten megteheti a programozó vagy maga a Java. Amikor maga a Java végzi, alapértelmezett konstruktorként nevezik.



Feltétlenül meg kell értenünk, hogy minden olyan metódus, amely rendelkezik a kódoló által a konstruktor számára biztosított privát jellel, csak magában az osztályban érhető el.

Magánépítő Java-ban

Singleton osztály

Magából a névből nevezhetünk egy osztályt szingulettnek, ha az az osztály objektumainak számát egyre korlátozza. Egy osztálynak ilyen esetekben nem lehet több, mint egyetlen objektum. A szingulett osztályokat kimerítően használják olyan fogalmakban, mint a hálózatépítés és az adatbázis-kapcsolat. A Singleton osztály a magánosztály .



Az osztály példányának kibontásához egy másik módszernek és egy visszatérési metódusnak kell lennie az eredmény visszaszerzéséhez. Az alábbiakban találom ugyanezt. Az első kép a valószínű eredményt ábrázolja, ahol az „a.x” értéke 20-nak felel meg, a „b.x” értéke pedig 20-nak is. A kódban, amíg meghatározzuk a szingulett privát osztályt, a konstruktorok nem érhetők el az osztályon kívül.

A.x értéke = 20

B.x értéke = 20

// Java program a Singleton // minta megvalósításának bemutatására privát konstruktorok segítségével. importálja a java.io. * osztály MySingleton {statikus MySingleton példány = null public int x = 10 // a privát konstruktor nem érhető el az osztályon kívül MySingleton () {} // Gyári módszer a felhasználók számára statikus nyilvános MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Driver Class osztály Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('ax értéke =' + ax) System.out.println ('bx értéke' + bx)}}

A Private Constructor hatása a Java-ban

A magánépítők nem tudnak hozzáférni egy másik osztályból származó származtatott osztályokhoz. Így meg kell adnunk egy nyilvános funkciót, amely felhívja a magánépítőt. Abban az esetben, ha az objektum nincs inicializálva, vagy vissza kell küldenünk egy példányt az objektumnak, ha inicializáltuk. Ez különösen hasznos olyan objektumok esetében, amelyek nem inicializálhatók. Magánépítőt a következő esetekben használnak:

  • A megfelelő osztályok, amelyek csak statikus módszerekkel és tagokkal rendelkeznek.
  • Azok a speciális osztályok, amelyek csak széles körben használják a statikus végtagokat (állandókat).
  • Szinglettek beépítése.
  • A gyári módszerek beépítése.

A felsorolások felhasználása, amelyek típusbiztonságosak.

Belső konstruktor láncolás

A belső konstruktor-láncolás az, amikor egy konstruktor felhív egy másik, ugyanolyan osztályú konstruktort, akkor konstruktor-láncolásnak nevezhetjük. Kötelességünk ezt a kulcsszót használni az osztály másik konstruktorának hívására. Bizonyos esetekben az osztályváltozók néhány alapértelmezett értékének meghatározására szolgál. Kérjük, vegye figyelembe azt is, hogy egy másik konstruktor hívásnak kell lennie az első utasításnak a kódblokkban.

Ezen kívül nem szabad rekurzív hívásokat folytatni, amelyek végtelen ciklust hoznak létre. Most nézzünk meg egy példát egy konstruktor láncolására a java programban.

csomag com.journaldev.constructor public class Employee {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('Default Employee Created')} public Employee (int i) { this ('John Doe', i) System.out.println ('Alapértelmezett névvel létrehozott alkalmazott')} nyilvános alkalmazott (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 = új alkalmazott (10) System.out.println (emp1) Alkalmazott emp2 = new Employee ('Pankaj', 20) System.out.println (emp2)} @Orride public String toString () {return 'ID =' + id + ', Név =' + név} 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 osztály tervezési minta

  • Osztályszintű tag (lelkes inicializálási módszer):

  1. Először készítsen egy állandó állandó privát példányt egy szingulett osztályról.

    nehéz megtanulni
  2. Ezután írjon egy statikus metódust, amely egy szingulett osztály objektumát adja vissza, amelyet osztálytag példányként hoztunk létre.

  3. Lehetőség van statikus tagot nyilvánosságként megjelölni, hogy közvetlenül hozzáférhessen az állandó statikus példányhoz.

  4. A szingulett osztály a normál Java osztálytól eltér a példányosítás szempontjából. Normál osztályban konstruktort használnak, de a szingleton osztályhoz a get példány () metódust használjuk.

  • Osztályszintű tag (Lusta inicializálási módszer):

  1. Először indítson el egy konstruktort privátként.

  2. Ezután hozzon létre egy privát statikus példányt erről a szingulett osztályról. Ne feledje, hogy NEM példázza.

  3. Ezután írjon egy statikus metódust, amely ellenőrzi a statikus példánytag nullát és elindítja a példányt. Végül a szinglett osztály egyik tárgyát adja vissza.

  • Osztály szintű tag (Lusta inicializálás kettős zár módszerrel):

Tekintsünk két futó szálat, ahol mindkettő egyidejűleg kerül az „if” utasításba, miközben a példány null. Ahol az egyik szál egy szinkronizált blokkba megy, hogy létrehozzon egy példányt, míg a másik blokkolva van. Mivel az első szál a szinkronizált blokkban található, a sorban lévő szál egy újabb szingulett objektumot hoz létre. Felhívjuk figyelmét, hogy amint a második szál szinkronizált blokkba lép, nem ellenőrzi, hogy a példány nem null-e.

  • Beágyazott belső osztály használata (Lazy Load módszer):

Itt a Java Nyelvi Specifikációkon (JLS) alapul. A Java virtuális gép statikus adattagokat csak igény szerint tölt be. Így a Singleton osztály tölti be először a JVM. Ennélfogva nincs statikus adattag egy osztályban

A Singleton osztály tulajdonosa nem tölti be a SINGLE_INSTANCE fájlt. Amikor a getIntance metódust meghívjuk, csak ez történik. A JLS garantálja az osztály inicializálásának végrehajtását. Rendelkezés a szinkronizáláshoz a statikus getInstance () metóduson a betöltéshez és az inicializáláshoz. Amint az inicializálás szekvenciális módon létrehozza a SINGLE_INSTANCE statikus változót, a getInstance () összes egyidejű invokációja ugyanaz lesz, szinkronizálás nélkül.

  • Az Enums használatával

A fenti megközelítések nem minden esetben jelentenek teljes megoldást. A fenti megvalósítások több példánya létrehozható a reflexió használatával. Mindkét esetben megkerülhetjük a privát konstruktort, és több példányt hozhatunk létre. Ezért új megközelítés az, hogy egy szinglik osztályt hozzunk létre enumok felhasználásával. Mivel az enums mezők összeállított időállandók, ezek enum típusú példányok. Akkor készülnek, amikor az enum típusra először hivatkoznak.

Ezzel a Private Constructor Java végére értünk. Remélem, megértette a magánépítőket és azt, hogy miként használhatók a Java-ban.

Nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték, hogy előrelépést nyújtson a Java programozásban, és kiképezzen mind az alapvető, mind a fejlett Java koncepciókra, valamint a különböző Java keretrendszerekkel, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg ennek a „Java Tutorial” blognak a megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.