Для чего нужен приватный конструктор в Java? Приведите пример.

«Для чего нужен приватный конструктор в Java? Приведите пример.» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Классы-утилиты (Utility/Helper classes): Классы, содержащие только статические методы.
  2. Реализация паттерна Singleton: Гарантия единственного экземпляра класса.
  3. Паттерн Factory Method: Создание объектов через статический фабричный метод.
  4. Классы-заполнители для статических констант.

Пример 1: Класс-утилита (наиболее частый случай)

public class MathUtils {
    // Приватный конструктор предотвращает инстанцирование
    private MathUtils() {
        throw new AssertionError("Utility class should not be instantiated");
    }

    // Только статические методы
    public static int add(int a, int b) {
        return a + b;
    }

    public static double circleArea(double radius) {
        return Math.PI * radius * radius;
    }
}

// Использование:
// int sum = MathUtils.add(5, 3); // Правильно
// MathUtils utils = new MathUtils(); // Ошибка компиляции!

Пример 2: Реализация Singleton (с ленивой инициализацией)

public class DatabaseConnection {
    private static DatabaseConnection instance;
    private String connectionString;

    // Приватный конструктор
    private DatabaseConnection() {
        this.connectionString = "jdbc:mysql://localhost/mydb";
        // Инициализация соединения...
    }

    // Публичный статический метод для получения единственного экземпляра
    public static synchronized DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }

    public void connect() { /* ... */ }
}

// Использование:
DatabaseConnection conn = DatabaseConnection.getInstance();
conn.connect();

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