Come implementare Private Constructor in Java



Questo articolo ti fornirà una conoscenza dettagliata e completa di Private Constructor in Java e il suo utilizzo con esempi.

Costruttori vengono utilizzati per inizializzare lo stato di un oggetto. Analogamente ai metodi, un costruttore può anche contenere una raccolta di istruzioni, che possono essere chiamate nient'altro che istruzioni. In questo articolo, discuteremo di Private Constructor in nel seguente ordine:

trasformazioni attive e passive in informatica

Introduzione a Constructor in Java

I costruttori vengono eseguiti al momento della creazione dell'oggetto. Per avere una migliore comprensione del costruttore e delle sue applicazioni, pensa a una scatola come a una classe. Si presume che una classe Box abbia alcune variabili di classe (ad esempio lunghezza, larghezza e altezza). Tuttavia, al momento della creazione del suo oggetto (ovvero Box esiste nella memoria del computer), così può esistere una scatola senza alcun valore definito per le sue quantità dimensionali.





Ovviamente no.

Quindi, viene introdotto un costruttore per assegnare valori alle variabili di classe durante la creazione dell'oggetto. Questo può essere fatto esplicitamente dal programmatore o dallo stesso Java. Quando viene eseguito da Java stesso, viene definito un costruttore predefinito.



È fondamentale comprendere che qualsiasi metodo, che possiede l'identificatore di accesso fornito dal codificatore al costruttore, che è reso privato, è accessibile solo all'interno della classe stessa.

Costruttore privato in Java

Classe Singleton

Dal nome stesso, possiamo chiamare una classe singleton se limita a uno il numero di oggetti di quella classe. Una classe non può avere più di un singolo oggetto in questi casi. Le classi singleton vengono utilizzate in modo esaustivo in concetti come il networking e la connettività del database. La classe Singleton è una lezione privata .



Deve esserci un altro modo per estrarre l'istanza della classe e un metodo return per recuperare il risultato. Di seguito è riportato un esempio appropriato dello stesso. Il primo pittogramma raffigura il probabile risultato in cui il valore di 'a.x' è uguale a 20 e anche il valore di 'b.x' risulta in 20. Nel codice, mentre definiamo la classe privata singleton, i suoi costruttori non sono accessibili al di fuori della classe.

Valore di a.x = 20

Valore di b.x = 20

// Programma Java per dimostrare l'implementazione del modello Singleton // utilizzando costruttori privati. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // private constructor cannot access outside the class private MySingleton () {} // Factory method to provide the users with static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Driver Class 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)}}

Impatto di Private Constructor in Java

I costruttori privati ​​non possono accedere alle classi derivate da un'altra classe. Quindi, dobbiamo dare una funzione pubblica, che chiama il costruttore privato. Nel caso in cui l'oggetto non è inizializzato, o dobbiamo rimandare un'istanza all'oggetto se è stato inizializzato. Ciò è particolarmente utile per gli oggetti che non possono essere inizializzati. Un costruttore privato viene utilizzato nei seguenti casi:

  • Le rispettive classi, che hanno solo metodi e membri statici.
  • Le classi specifiche, che hanno solo membri finali statici ampiamente utilizzati (costanti).
  • Per incorporare singleton.
  • Per incorporare i metodi di fabbrica.

Per utilizzare le enumerazioni, che sono indipendenti dai tipi.

Concatenamento del costruttore interno

Il concatenamento di costruttori interni si verifica quando un costruttore chiama un altro costruttore della stessa classe, quindi può essere definito concatenamento di costruttori. È nostro dovere utilizzare questa parola chiave per chiamare un altro costruttore della classe. In alcuni casi, viene utilizzato per definire alcuni valori predefiniti delle variabili di classe. Tieni inoltre presente che un'altra chiamata al costruttore deve essere la prima istruzione nel blocco di codice.

Inoltre, non dovrebbero esserci chiamate ricorsive, che creeranno un ciclo infinito. Vediamo ora un esempio di concatenamento di costruttori in un programma Java.

pacchetto 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 ('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

  • Membro a livello di classe (metodo di inizializzazione desideroso):

  1. Innanzitutto, crea un'istanza statica costante privata di una classe singleton.

  2. Quindi, scrivi un metodo statico, che restituisce l'oggetto di una classe singleton, che abbiamo creato come istanza del membro della classe.

  3. È possibile contrassegnare un membro statico come pubblico per accedere direttamente all'istanza statica costante.

  4. La classe singleton varia da una normale classe Java in termini di istanziazione. In una classe normale, viene utilizzato un costruttore, ma per la classe singleton usiamo il metodo get Instance ().

  • Membro a livello di classe (metodo di inizializzazione pigra):

  1. Innanzitutto, avvia un costruttore come privato.

  2. Quindi creare un'istanza statica privata di questa classe singleton. Ricorda di NON istanziarlo.

  3. Quindi, scrivi un metodo statico, che controlla il membro dell'istanza statica per null e avvia l'istanza. Infine, restituisce un oggetto della classe singleton.

  • Il membro a livello di classe (inizializzazione pigra con metodo a doppio blocco):

Si consideri due thread in esecuzione in cui entrambi entrano nell'istruzione 'if' contemporaneamente mentre l'istanza è nulla. Dove, un thread entra in un blocco sincronizzato per creare un'istanza, mentre l'altro è bloccato. Poiché il primo thread risiede nel blocco sincronizzato, il thread nella coda crea un altro oggetto singleton. Si noti che quando il secondo thread entra in un blocco sincronizzato, non riesce a verificare se l'istanza non è nulla.

  • Utilizzo della classe interna nidificata (metodo Lazy Load):

Qui, si basa sulle specifiche del linguaggio Java (JLS). La Java Virtual Machine carica i membri dati statici solo su richiesta. Pertanto, la classe Singleton viene caricata prima dalla JVM. Pertanto, non vi è alcun membro di dati statici in una classe

Il Singleton Class Holder non carica SINGLE_INSTANCE. Quando invochiamo il metodo getIntance, si verifica solo questo. JLS garantisce l'esecuzione dell'inizializzazione della classe. Una disposizione per la sincronizzazione esplicita sul metodo statico getInstance () per il caricamento e l'inizializzazione. Poiché l'inizializzazione crea la variabile statica SINGLE_INSTANCE in modo sequenziale, tutte le chiamate simultanee di getInstance () torneranno uguali senza sovraccarico di sincronizzazione.

  • Utilizzando Enums

Non tutti gli approcci di cui sopra sono soluzioni complete in tutti i casi. È possibile creare più istanze delle implementazioni precedenti utilizzando la reflection. In entrambi gli scenari, possiamo bypassare il costruttore privato e creare più istanze. Pertanto, un nuovo approccio consiste nel creare una classe singleton usando le enumerazioni. Poiché i campi enum sono costanti di tempo compilate, sono istanze del loro tipo enum. Vengono costruiti quando si fa riferimento al tipo enum per la prima volta.

Con questo, arriviamo alla fine dell'articolo Private Constructor in Java. Spero che tu abbia capito i costruttori privati ​​e come possono essere utilizzati in Java.

Controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per studenti e professionisti che desiderano diventare sviluppatori Java. Il corso è progettato per darti un vantaggio nella programmazione Java e formarti sia sui concetti di base che avanzati su Java insieme a vari framework Java come Hibernate e Spring.

Hai domande per noi? Si prega di menzionarlo nella sezione commenti di questo blog 'Java Tutorial' e ti risponderemo il prima possibile.