Как реализовать частный конструктор на Java



Эта статья предоставит вам подробные и всесторонние знания о Private Constructor в Java и его использовании с примерами.

Конструкторы используются для инициализации состояния объекта. Подобно методам, конструктор также может содержать набор операторов, которые нельзя называть ничем, кроме инструкций. В этой статье мы обсудим частный конструктор в в следующем порядке:

Введение в конструктор в Java

Конструкторы выполняются в момент создания объекта. Чтобы лучше понять конструктор и его приложения, просто представьте коробку как класс. Предполагается, что класс Box имеет некоторые переменные класса (например, длину, ширину и высоту). Однако во время создания своего объекта (т.е.Бокс существует в памяти компьютера), поэтому может существовать ящик без значения, определенного для его размерных величин.





Очевидно, нет.

Следовательно, вводится конструктор для присвоения значений переменным класса при создании объекта. Это может быть сделано явно программистом или самой Java. Когда это делается самой Java, он называется конструктором по умолчанию.



Обязательно понимать, что любой метод, который обладает спецификатором доступа, предоставленным кодировщиком конструктору, который сделан закрытым, может быть доступен только внутри самого класса.

Частный конструктор на Java

использование итератора в Java

Синглтон-класс

Из самого имени мы можем назвать класс синглтоном, если он ограничивает количество объектов этого класса одним. В таких случаях у класса не может быть более одного объекта. Одноэлементные классы исчерпывающе используются в таких понятиях, как сеть и подключение к базе данных. Класс Singleton - это частный класс .



Должен быть другой способ извлечения экземпляра класса и метод возврата, чтобы получить результат. Ниже приведена наглядная иллюстрация того же. Первая пиктограмма изображает вероятный результат, где значение «a.x» равно 20, а значение «b.x» также дает 20. В коде, когда мы определяем частный класс singleton, к его конструкторам нельзя получить доступ за пределами класса.

Значение a.x = 20

Значение b.x = 20

// Программа на Java для демонстрации реализации паттерна Singleton // с использованием частных конструкторов. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // закрытый конструктор недоступен вне класса private MySingleton () {} // Заводской метод для предоставления пользователям экземпляров static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Класс класса драйвера Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Значение ax =' + ax) System.out.println ('Значение bx =' + bx)}}

Влияние частного конструктора в Java

Частные конструкторы не могут получить доступ к производным классам из другого класса. Таким образом, мы должны предоставить публичную функцию, которая вызывает частный конструктор. В случае, если объект не инициализирован, или мы должны отправить экземпляр объекту, если он был инициализирован. Это особенно полезно для объектов, которые нельзя инициализировать. Частный конструктор используется в следующих случаях:

  • Соответствующие классы, которые имеют только статические методы и члены.
  • Конкретные классы, в которых широко используются только статические конечные члены (константы).
  • Чтобы включить синглтоны.
  • Внедрить фабричные методы.

Использовать типобезопасные перечисления.

Цепочка внутреннего конструктора

Цепочка внутренних конструкторов - это когда конструктор вызывает другой конструктор того же класса, тогда это можно назвать цепочкой конструкторов. Наш долг - использовать это ключевое слово для вызова другого конструктора класса. В некоторых случаях он используется для определения некоторых значений переменных класса по умолчанию. Также имейте в виду, что вызов другого конструктора должен быть первым оператором в блоке кода.

Кроме того, не должно быть рекурсивных вызовов, которые создадут бесконечный цикл. Давайте теперь посмотрим на пример цепочки конструкторов в 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')} public Employee (int i) { this ('John Doe', i) System.out.println ('Сотрудник, созданный с именем по умолчанию')} 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 = новый сотрудник ('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

  • Член уровня класса (метод нетерпеливой инициализации):

  1. Сначала создайте частный постоянный статический экземпляр одноэлементного класса.

  2. Затем напишите статический метод, который возвращает объект одноэлементного класса, который мы создали как экземпляр члена класса.

    пример пространства имен c ++
  3. Статический член можно пометить как общедоступный для прямого доступа к статическому экземпляру константы.

  4. Одноэлементный класс отличается от обычного Java-класса с точки зрения создания экземпляров. В обычном классе используется конструктор, но для одноэлементного класса мы используем метод get Instance ().

  • Член уровня класса (метод отложенной инициализации):

  1. Сначала создайте конструктор как закрытый.

  2. Затем создайте частный статический экземпляр этого одноэлементного класса. Имейте в виду, что НЕ создавайте его.

  3. Затем напишите статический метод, который проверяет член статического экземпляра на значение null и инициирует экземпляр. Наконец, он возвращает объект одноэлементного класса.

  • Член уровня класса (Ленивая инициализация с методом двойной блокировки):

Рассмотрим два запущенных потока, в которых оба одновременно попадают в оператор «if», пока экземпляр имеет значение NULL. Где один поток переходит в синхронизированный блок для создания экземпляра, а другой блокируется. Поскольку первый поток находится в синхронизированном блоке, поток в очереди создает еще один одноэлементный объект. Обратите внимание, что когда второй поток входит в синхронизированный блок, он не может проверить, не является ли экземпляр ненулевым.

Здесь он основан на спецификациях языка Java (JLS). Виртуальная машина Java загружает статические элементы данных только по запросу. Таким образом, JVM сначала загружает класс Singleton. Следовательно, в классе нет статического члена данных

Держатель класса Singleton не загружает SINGLE_INSTANCE. Когда мы вызываем метод getIntance, происходит только это. JLS гарантирует выполнение инициализации класса. Положение о явной синхронизации статического метода getInstance () для загрузки и инициализации. Поскольку при инициализации последовательно создается статическая переменная SINGLE_INSTANCE, все параллельные вызовы getInstance () возвращаются одинаково без дополнительных затрат на синхронизацию.

  • Используя Enums

Не все вышеперечисленные подходы являются законченными решениями во всех случаях. С помощью отражения можно создать несколько экземпляров вышеуказанных реализаций. В обоих сценариях мы можем обойти частный конструктор и создать несколько экземпляров. Поэтому новый подход заключается в создании одноэлементного класса с помощью перечислений. Поскольку поля перечислений являются константами времени компиляции, они являются экземплярами своего типа перечисления. Они создаются при первом обращении к типу перечисления.

На этом мы подошли к концу статьи о частном конструкторе в Java. Надеюсь, вы получили представление о частных конструкторах и о том, как их можно использовать в Java.

Проверьте от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Курс обучения и сертификации по Java J2EE и SOA от Edureka предназначен для студентов и профессионалов, которые хотят стать Java-разработчиками. Курс разработан, чтобы дать вам хорошее начало в программировании на Java и обучить вас как основным, так и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога «Учебник по Java», и мы свяжемся с вами как можно скорее.