Konstruktorzy są wykorzystywane do inicjalizacji stanu obiektu. Podobnie jak metody, konstruktor może również przechowywać zbiór instrukcji, które można nazwać tylko instrukcjami. W tym artykule omówimy Private Constructor w w następującej kolejności:
- Wprowadzenie do konstruktora w Javie
- Klasa singletona
- Wpływ prywatnego konstruktora w Javie
- Łańcuch konstruktora wewnętrznego
- Wzorzec projektowy klasy singleton
Wprowadzenie do konstruktora w Javie
Konstruktory są wykonywane w momencie tworzenia obiektu. Aby lepiej zrozumieć konstruktora i jego aplikacje, pomyśl o pudełku jako o klasie. Zakłada się, że klasa Box ma pewne zmienne klasowe (tj. Długość, szerokość i wysokość). Jednak w momencie tworzenia obiektu (tj. Box istnieje w pamięci komputera), może więc istnieć pudełko bez zdefiniowanej wartości dla jego wielkości wymiarowych.
Oczywiście nie.
W związku z tym wprowadzono konstruktor, który przypisuje wartości do zmiennych klas podczas tworzenia obiektu. Może to zrobić bezpośrednio programista lub sama Java. Gdy jest wykonywany przez samą Javę, jest określany jako domyślny konstruktor.
Konieczne jest zrozumienie, że każda metoda, która posiada specyfikator dostępu dostarczony konstruktorowi przez kodera, a która jest ustawiona jako prywatna, może być dostępna tylko wewnątrz samej klasy.
Klasa singletona
Na podstawie samej nazwy możemy nazwać klasę singletonem, jeśli ogranicza ona liczbę obiektów tej klasy do jednego. W takich przypadkach klasa nie może mieć więcej niż jednego obiektu. Klasy singleton są używane w sposób wyczerpujący w pojęciach, takich jak sieci i łączność z bazą danych. Klasa singleton to lekcje prywatne .
Musi istnieć inny sposób wyodrębnienia instancji klasy i metoda zwracania w celu pobrania wyniku. Poniżej znajduje się trafna ilustracja tego samego. Pierwszy piktogram przedstawia prawdopodobny wynik, gdzie wartość „a.x” równa się 20, a wartość „b.x” również daje 20. W kodzie, podczas gdy definiujemy pojedynczą klasę prywatną, jej konstruktory nie są dostępne poza klasą.
Wartość a.x = 20
Wartość b.x = 20
// Program w języku Java do zademonstrowania implementacji wzorca // Singleton przy użyciu prywatnych konstruktorów. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // prywatny konstruktor nie może być dostępny poza klasą private MySingleton () {} // Factory metoda zapewniająca użytkownikom instancje statyczne publiczne MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Klasa sterownika 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)}}
Wpływ prywatnego konstruktora w Javie
Konstruktorzy prywatni nie mogą uzyskać dostępu do klas pochodnych z innej klasy. Dlatego musimy podać funkcję publiczną, która wywołuje konstruktora prywatnego. W przypadku, gdy obiekt nie został zainicjowany lub musimy odesłać instancję do obiektu, jeśli została zainicjowana. Jest to szczególnie przydatne w przypadku obiektów, których nie można zainicjować. Konstruktor prywatny jest używany w następujących przypadkach:
- Odpowiednie klasy, które mają tylko statyczne metody i elementy członkowskie.
- Określone klasy, które mają tylko powszechnie używane statyczne składowe końcowe (stałe).
- Włączanie singletonów.
- Włączenie metod fabrycznych.
Aby użyć wyliczeń, które są bezpieczne dla typów.
Łańcuch konstruktora wewnętrznego
Wewnętrzne tworzenie łańcuchów konstruktorów ma miejsce, gdy konstruktor wywołuje inny konstruktor tej samej klasy, a następnie może być określane jako łańcuch konstruktora. Naszym obowiązkiem jest użycie tego słowa kluczowego do wywołania innego konstruktora klasy. W niektórych przypadkach służy do definiowania domyślnych wartości zmiennych klas. Należy również pamiętać, że inne wywołanie konstruktora musi być pierwszą instrukcją w bloku kodu.
Ponadto nie powinno być wywołań rekurencyjnych, które utworzą nieskończoną pętlę. Przyjrzyjmy się teraz przykładowi tworzenia łańcucha konstruktora w programie Java.
pakiet 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 ('Pracownik utworzony z domyślną nazwą')} public Pracownik (String s, int i) {this.id = i this.name = s System.out.println ( „Utworzono pracownika”)} 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 = nowy pracownik ('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 () {nazwa zwracana} public void setName (nazwa ciągu) {this.name = nazwa}}
Wzorzec projektowy klasy singleton
Element członkowski na poziomie klasy (chętna metoda inicjalizacji):
Najpierw utwórz prywatną stałą statyczną instancję klasy pojedynczej.
Następnie napisz metodę statyczną, która zwraca obiekt klasy pojedynczej, którą utworzyliśmy jako instancję składową klasy.
Istnieje możliwość oznaczenia statycznego elementu członkowskiego jako publicznego, aby uzyskać bezpośredni dostęp do stałej instancji statycznej.
Pod względem tworzenia instancji klasa pojedyncza różni się od zwykłej klasy Java. W normalnej klasie używany jest konstruktor, ale dla klasy pojedynczej używamy metody get Instance ().
Element na poziomie klasy (metoda leniwej inicjalizacji):
Najpierw zainicjuj konstruktora jako prywatnego.
Następnie utwórz prywatną statyczną instancję tej klasy pojedynczej. Pamiętaj, aby NIE tworzyć jej wystąpienia.
Następnie napisz metodę statyczną, która sprawdza element członkowski wystąpienia statycznego pod kątem wartości null i inicjuje wystąpienie. Na koniec zwraca obiekt klasy singleton.
Element członkowski na poziomie klasy (inicjalizacja z opóźnieniem z metodą podwójnej blokady):
Rozważmy dwa działające wątki, w których oba wchodzą do instrukcji „if” jednocześnie, gdy instancja ma wartość null. Gdzie jeden wątek przechodzi do zsynchronizowanego bloku, aby utworzyć instancję, podczas gdy drugi jest blokowany. Ponieważ pierwszy wątek znajduje się w zsynchronizowanym bloku, wątek w kolejce tworzy kolejny obiekt singleton. Należy pamiętać, że gdy drugi wątek wchodzi do zsynchronizowanego bloku, nie sprawdza, czy instancja ma wartość inną niż null.
Korzystanie z zagnieżdżonej klasy Inner (metoda Lazy Load):
Tutaj jest oparty na specyfikacji języka Java (JLS). Wirtualna maszyna języka Java ładuje statyczne elementy składowe danych tylko na żądanie. W związku z tym klasa Singleton jest ładowana jako pierwsza przez maszynę JVM. W związku z tym w klasie nie ma statycznego elementu członkowskiego danych
Uchwyt klasy singleton nie ładuje SINGLE_INSTANCE. Kiedy wywołujemy metodę getIntance, dzieje się tylko to. JLS gwarantuje wykonanie inicjalizacji klasy. Przepis na jawną synchronizację w statycznej metodzie getInstance () na potrzeby ładowania i inicjowania. Ponieważ inicjalizacja tworzy zmienną statyczną SINGLE_INSTANCE w sposób sekwencyjny, wszystkie współbieżne wywołania metody getInstance () powrócą tak samo bez obciążenia synchronizacją.
jakie jest zastosowanie serializacji w java
Używając Enums
Nie wszystkie powyższe podejścia są kompletnymi rozwiązaniami we wszystkich przypadkach. Za pomocą odbicia można utworzyć wiele wystąpień powyższych implementacji. W obu scenariuszach możemy ominąć prywatnego konstruktora i stworzyć wiele instancji. Dlatego nowym podejściem jest utworzenie klasy pojedynczej przy użyciu wyliczeń. Ponieważ pola wyliczeniowe są kompilowanymi stałymi czasowymi, są one wystąpieniami ich typu wyliczeniowego. Są konstruowane, gdy typ wyliczenia jest przywoływany po raz pierwszy.
Tym samym dochodzimy do końca artykułu Private Constructor in Java. Mam nadzieję, że rozumiesz, czym są prywatne konstruktory i jak można ich używać w Javie.
Sprawdź autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie i certyfikacja J2EE i SOA firmy Edureka jest przeznaczony dla studentów i profesjonalistów, którzy chcą zostać programistami Java. Kurs ma na celu zapewnienie przewagi w programowaniu w języku Java i szkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu „Java Tutorial”, a skontaktujemy się z Tobą tak szybko, jak to możliwe.