Cum se implementează constructorul privat în Java



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare despre Private Constructor în Java și se folosește cu exemple.

Constructori sunt utilizate pentru a inițializa starea unui obiect. Similar metodelor, un constructor poate deține și o colecție de instrucțiuni, care nu poate fi numită decât instrucțiuni. În acest articol, vom discuta despre constructorul privat în în următoarea ordine:

Introducere în Constructor în Java

Constructorii sunt executați în momentul creării obiectului. Pentru a obține o mai bună înțelegere a constructorului și a aplicațiilor sale, gândiți-vă doar la o cutie ca la o clasă. Se presupune că o clasă Box are câteva variabile de clasă (adică lungimea, lățimea și înălțimea). Cu toate acestea, în momentul creării obiectului său (de exemplu, cutia există în memoria computerului), poate exista o cutie fără valoare definită pentru cantitățile sale dimensionale.





Evident, nu.

Prin urmare, este introdus un constructor pentru a atribui valori variabilelor de clasă la crearea obiectelor. Acest lucru poate fi făcut în mod explicit de către programator sau de Java însuși. Când este realizat chiar de Java, este denumit constructor implicit.



Este imperativ să înțelegem că orice metodă, care posedă un specificator de acces furnizat de codificator constructorului, care este făcut privat, poate fi accesat numai în interiorul clasei.

Constructor privat în Java

Singleton Class

Din numele în sine, putem numi o clasă singleton dacă restricționează numărul de obiecte ale acelei clase la unul. O clasă nu poate avea mai mult de un singur obiect în astfel de cazuri. Clasele de singleton sunt utilizate exhaustiv în concepte precum conectivitatea la rețea și baza de date. Clasa Singleton este o clasa privată .



Trebuie să existe un alt mod de a extrage instanța clasei și o metodă de returnare pentru a prelua rezultatul. Mai jos este o ilustrare adecvată a aceluiași. Primul pictograf ilustrează rezultatul probabil în care valoarea „a.x” este egală cu 20, iar valoarea „b.x” rezultă și în 20. În cod, în timp ce definim clasa privată singleton, constructorii acesteia nu pot fi accesați în afara clasei.

Valoarea a.x = 20

Valoarea b.x = 20

// Program Java pentru a demonstra implementarea modelului Singleton // folosind constructori privați. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // private constructor nu poate fi accesat în afara clasei private MySingleton () {} // Metoda din fabrică pentru a oferi utilizatorilor instanțe MySingleton public static getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Clasa Driver Class Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Value of ax =' + ax) System.out.println ('Value of bx =' + bx)}}

Impactul constructorului privat în Java

Constructorii privați nu pot accesa clase derivate dintr-o altă clasă. Astfel, trebuie să dăm o funcție publică, care numește constructorul privat. În cazul în care obiectul nu este inițializat sau trebuie să trimitem înapoi o instanță obiectului dacă a fost inițializat. Acest lucru este deosebit de util pentru obiecte, care nu pot fi inițializate. Un constructor privat este utilizat în următoarele cazuri:

  • Clasele respective, care au doar metode statice și membri.
  • Clasele specifice, care au folosit pe scară largă membri finali statici (constante).
  • Pentru a încorpora singletoni.
  • Pentru a încorpora metodele din fabrică.

Pentru a utiliza enumerări, care sunt sigure pentru tip.

Înlănțuirea constructorului intern

Înlănțuirea constructorului intern este atunci când un constructor numește un alt constructor din aceeași clasă, atunci poate fi denumit înlănțuirea constructorului. Este de datoria noastră să folosim acest cuvânt cheie pentru a apela un alt constructor al clasei. În unele cazuri, este utilizat pentru a defini unele valori implicite ale variabilelor de clasă. Rețineți, de asemenea, că un alt apel de constructor trebuie să fie prima declarație din blocul de cod.

matrice de sortare c ++ în ordine crescătoare

În plus, nu ar trebui să existe apeluri recursive, care vor crea o buclă infinită. Să aruncăm o privire la un exemplu de constructor înlănțuit în programul java.

package com.journaldev.constructor public class Employee {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('Default Employee Created')} Employee public (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}}

Model de proiectare clasă Singleton

  • Membru la nivel de clasă (Metodă de inițializare Eager):

  1. În primul rând, creați o instanță statică constantă privată a unei clase singleton.

  2. Apoi, scrieți o metodă statică, care returnează obiectul unei clase singleton, pe care am creat-o ca instanță membru-clasă.

  3. Este posibil să marcați un membru static ca public pentru a accesa direct instanța statică constantă.

  4. Clasa singleton variază de la o clasă Java normală în ceea ce privește instanțierea. Într-o clasă normală, se folosește un constructor, dar pentru clasa singleton folosim metoda get Instance ().

  • Membru la nivel de clasă (Metoda de inițializare leneșă):

  1. În primul rând, inițiați un constructor ca privat.

  2. Apoi creați o instanță statică privată a acestei clase de singleton. Rețineți că NU îl instanțiați.

  3. Apoi, scrieți o metodă statică, care verifică membrul instanței statice pentru nul și inițiază instanța. În cele din urmă, returnează un obiect din clasa singleton.

  • Membru la nivel de clasă (inițializare leneșă cu metodă de blocare dublă):

Luați în considerare două fire care rulează în care ambele intră simultan în instrucțiunea „if” în timp ce instanța este nulă. Unde, un fir intră într-un bloc sincronizat pentru a crea o instanță, în timp ce celălalt este blocat. Deoarece primul fir se află în blocul sincronizat, firul din coadă creează un alt obiect singleton. Vă rugăm să rețineți că, pe măsură ce al doilea fir intră într-un bloc sincronizat, acesta nu reușește să verifice dacă instanța este nulă.

  • Utilizarea clasei interioare imbricate (metoda Lazy Load):

Aici, se bazează pe specificațiile Java Language (JLS). Mașina virtuală Java încarcă membrii statici de date numai la cerere. Astfel, clasa Singleton se încarcă mai întâi de JVM. Prin urmare, nu există un membru de date statice într-o clasă

Titularul de clasă Singleton nu încarcă SINGLE_INSTANCE. Când invocăm metoda getIntance, se întâmplă numai aceasta. JLS garantează executarea inițializării clasei. O prevedere pentru sincronizare explicită pe metoda statică getInstance () pentru încărcare și inițializare. Pe măsură ce inițializarea creează variabila statică SINGLE_INSTANCE într-un mod secvențial, toate invocațiile concurente ale getInstance () vor reveni la fel fără overhead de sincronizare.

Nu toate abordările de mai sus sunt soluții complete în toate cazurile. Mai multe instanțe ale implementărilor de mai sus pot fi create utilizând reflexie. În ambele scenarii, putem ocoli constructorul privat și putem crea mai multe instanțe. Prin urmare, o nouă abordare este de a crea o clasă singleton folosind enumere. Deoarece câmpurile de enumerări sunt constante de timp compilate, acestea sunt instanțe de tipul lor de enumerare. Ele sunt construite atunci când se face referință pentru tipul enum pentru prima dată.

Cu aceasta, ajungem la sfârșitul articolului Private Constructor în Java. Sper că ați înțeles constructorii privați și cum pot fi folosiți în Java.

Verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început important în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Tutorial Java” și vă vom contacta cât mai curând posibil.