Модуль 5. Урок 2. Конструкторы в Java.
Для перемещения по курсу нужно зарегистрироваться
1. Модуль 1. Урок 1. Введение в Java. ↳ теория
2. Модуль 1. Урок 2. Виды языков программирования и место языка Java среди них. ↳ теория / тесты
3. Модуль 1. Урок 3. Из чего состоит Java. ↳ теория / тесты
4. Модуль 1. Урок 4. Основы работы в терминале (ознакомительный). ↳ теория / тесты
5. Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. ↳ теория / тесты
6. Модуль 2. Урок 1. Введение в ООП. ↳ теория / тесты
7. Модуль 2. Урок 2. Типы данных в Java. ↳ теория / тесты
8. Модуль 2. Урок 3. Работа с экземплярами в Java. ↳ теория / тесты
9. Модуль 2. Урок 4. Пакеты в Java. ↳ теория / тесты
10. Модуль 3. Урок 1. Основы использования и создания методов в классах. ↳ теория / тесты
11. Модуль 3. Урок 2. Аргументы и результаты работы методов. Рефакторинг. ↳ теория / тесты
12.
Модуль 3. Урок 3. Уровни методов в Java.
13. Модуль 3. Урок 4. Наследование в Java. ↳ теория / тесты
14. Модуль 3. Урок 5. Аннотация @Override в Java. ↳ теория / тесты
15. Модуль 4. Урок 1. Условный оператор IF в Java. ↳ теория / тесты
16. Модуль 4. Урок 2. Массивы в Java. ↳ теория / тесты
17. Модуль 4. Урок 3. Циклы в Java. ↳ теория / тесты
18. Модуль 4. Урок 4. Оператор SWITCH в Java. ↳ теория / тесты
19. Модуль 5. Урок 1. Уровни доступа в Java. ↳ теория / тесты
20. Модуль 5. Урок 2. Конструкторы в Java. ↳ теория / тесты
21. Модуль 5. Урок 3. Неизменяемые объекты. ↳ теория / тесты
22. Модуль 5. Урок 4. Паттерн проектирования Builder. ↳ теория / тесты
23. Модуль 5. Урок 5. Перечисления в Java. ↳ теория / тесты
24. Модуль 6. Урок 1. Составные строки в Java. ↳ теория / тесты
25. Модуль 6. Урок 2. Манипуляции c символами. ↳ теория / тесты
26. Модуль 6. Урок 3. Преобразование строк в числа и обратно. ↳ теория / тесты
27. Модуль 7.
28. Модуль 7. Урок 2. Абстрактные классы. ↳ теория / тесты
29. Модуль 7. Урок 3. Интерфейс List в Java. ↳ теория / тесты
30. Модуль 8. Урок 1. Nested (static) классы в Java. ↳ теория / тесты
31. Модуль 8. Урок 2. Inner (non-static) классы в Java. ↳ теория / тесты
32. Модуль 8. Урок 3. Анонимные классы в Java. ↳ теория / тесты
33. Модуль 9. Урок 1. Исключения в Java. ↳ теория / тесты
34. Модуль 9. Урок 2. Иерархия исключений. ↳ теория / тесты
35. Модуль 10. Урок 1. Проект ХО. ↳ теория
36. Модуль 10. Урок 2. Проект ХО. ↳ теория
37. Модуль 10. Урок 3. Проект ХО. ↳ теория
38. Модуль 10. Урок 4. Проект ХО. ↳ теория
Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как
Не понятна формулировка, нашли опечатку?
Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку
Что-то не получается в уроке?
Загляните в раздел «Обсуждение»:
- Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
- Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
- Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!
Подробнее о том, как задавать вопросы по уроку
java — Private конструктор — Stack Overflow на русском
Вопрос задан
Изменён 1 год 5 месяцев назад
Просмотрен 10k раз
Можно ли создать объект, если конструктор имеет модификатор private
? Если да, то зачем собственно конструктору нужен модификатор доступа?
- java
- ооп
- конструктор
1
Это нужно, когда объект создается функцией-фабрикой (статической) того же класса. Часто, после создания объекта необходимо вызвать какой-либо его метод (например, для инициализации, которая не может быть выполнена в конструкторе), без вызова которого объектом нельзя пользоваться.
Приватный конструктор запрещает создание экземпляра класса вне методов самого класса, например, что гарантировать существование только одного объекта определённого класса, предположим какого-то ресурса, например БД.
Подробнее про паттерн Singleton (Одиночка)
можно. чтобы создавать только из статических методов данного класса. сделать что-то типа фабрики.
Создать можно через статический метод фабрику, это делается для того чтобы не создавать объекты напрямую, чтобы именовать конструкторы, но так же можно создать такой объект через рефлексию.
UPD
Ещё такие классы с приватными конструкторами используют для создания утилитарных классов, в которых есть только static методы.
Модификатор доступа private
определяет доступ в рамках данного класса, где вы можете создавать объекты. Т.е. вы не сможете создать объект этого класса за его пределами, так например с помощью
new
из другого класса или блока.
Конечно если вы не используете рефлексию, которая может изменить положение вещей.
Зачем это нужно, ну скажем вы хотите контролировать создание объектов внутри класса.
Это может делаться в том случае если для работы с классом не нужны его объекты: яркий пример утильные классы в которых все методы статические для работы с которыми объекты класса не нужны. К примеру класс java.util.Collections, который определяет вспомогательные методы для работы с коллекциями. Покопайтесь в нём и Вам всё станет понятно. Как говорится «Больше тысячи слов». Повторюсь: модификатор private конструктору нужен, для того чтобы снаружи класса нельзя было создавать объекты через этот конструктор и им можно было пользоваться только внутри самого класса, а применений масса.
Зарегистрируйтесь или войдите
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Учебник по Java: Конструкторы в Java
Введение в Java + Установка Java JDK и IntelliJ IDEA для Java
Базовая структура программы на Java: Понимание нашей первой программы Hello World на Java
Учебник по Java: Переменные и типы данных в программировании на Java
Учебное пособие по Java: Литералы в Java
Учебное пособие по Java: Получение пользовательского ввода в Java
Программирование на Java. Упражнение 1: Калькулятор процентных ставок CBSE Board
Учебное пособие по Java: Глава 1. Практический набор | Проблемы с практикой Java с решением
Учебное пособие по Java. Операторы, типы операторов и выражения в Java
Учебное пособие по Java. Ассоциативность операторов в Java
Учебное пособие по Java. Тип данных выражений и операторы увеличения/уменьшения
Учебное пособие по Java.
Учебное пособие по Java: Глава 2. Практический набор (вопросы по практике Java)
Учебное пособие по Java: Введение в строки
Учебное пособие по Java: Строковые методы в Java
Практические вопросы по Java по строкам: Практический набор по строкам Java (необходимо решить!)
Условные операторы Java: Оператор If-else в Java
Учебное пособие по Java: Реляционные и логические операторы в Java
Учебное пособие по Java: Операторы Switch Case в Java
Учебное пособие по Java: Практические вопросы по условным операторам и Switch Case
Упражнение по программированию на Java 2 : Rock, Paper Scissors Game в Java
Учебное пособие по Java: циклы While в Java
Учебное пособие по Java: цикл do-while в Java
Учебное пособие по Java: цикл for в Java
Учебное пособие по Java: прерывание и продолжение в Java
Учебное пособие по Java: Практические вопросы по циклам
Учебное пособие по Java: Введение в массивы
Учебное пособие по Java: Для каждого цикла в Java
Учебное пособие по Java: Многомерные массивы в Java Практические вопросы по массивам в Java
Как сделать так, чтобы IntelliJ IDEA выглядела потрясающе!
Учебное пособие по Java. Методы в Java
Учебное пособие по Java. Перегрузка методов в Java
Учебное пособие по Java. Переменные аргументы (VarArgs) в Java
Учебник по Java. Рекурсия в Java
Учебник по Java. Практические вопросы по методам Java
Учебник по Java. Введение в объектно-ориентированное программирование
Учебник по Java.
Учебное пособие по Java. Основные вопросы по объектно-ориентированному программированию
Учебное пособие по Java. Модификаторы доступа, геттеры и сеттеры в Java
Учебное пособие по Java. Упражнение 2. Решение и комментарии
Учебное пособие по Java. Конструкторы в Java
Упражнение по Java 3. Угадай число (версия OOPs)
Учебное пособие по Java. Упражнение по модификаторам доступа и конструкторам
Наследование в Java
Наследование конструкторов в Java
this и ключевое слово super в JavaПереопределение метода в Java
Динамическая отправка методов в Java
Учебное пособие по Java: Упражнение 3 — Решения и комментарии
Учебное пособие по Java: Упражнение 4 — Онлайн-библиотека
Учебник по Java: Упражнения и практические вопросы по наследованию
Учебник по Java: Абстрактные классы и абстрактные методы
Учебник по Java: Введение в интерфейсы
Учебник по Java: Абстрактные классы и интерфейсы
Почему множественное наследование не поддерживается в Java?
Пример интерфейса Java и методы по умолчанию
Наследование в интерфейсах
Учебник по Java: Полиморфизм в интерфейсах
Практика Java Вопросы по абстрактным классам и интерфейсам
Java-упражнение 4: решение и приветствие!
Интерпретируемые и компилируемые языки!
Java интерпретируется или компилируется?
Пакеты в Java
Учебник по Java. Создание пакетов в Java
Модификаторы доступа в Java
Практический набор по пакету и модификаторам доступа в Java
Упражнение 5 по Java: Создание пользовательского пакета путем расширения класса Thread
Создание потока Java с использованием интерфейса Runnable
Жизненный цикл потока Java
Конструкторы из класса Thread в Java
Приоритеты потока Java
Методы потока Java
Учебник по Java: практические вопросы по потоку
Упражнение 5: Решение и приветствие!
Ошибки и исключения в Java
Синтаксические ошибки, ошибки времени выполнения и логические ошибки в Java (демонстрация)
Исключения и блок Try-Catch в Java
Обработка определенных исключений в Java
Вложенный Try-Catch в Java
Класс Exception в Java
Throw vs Throws в Java
Наконец блок в Java и зачем он нужен!
Практический набор по ошибкам и исключениям
Java-упражнение 6: Пользовательский калькулятор | Практический вопрос по Java
Java Collections Framework
Иерархия коллекций в Java
Как правильно просматривать документацию по Java
ArrayList в Java: демонстрация и методы
LinkedList в Java: демонстрация и методы
ArrayDeque в Java
Хеширование в Java
HashSet в Java
Дата и время в Java
Класс Date в Java
Класс календаря в Java
java2 GregoriantimeCalendar class & TimeZone в java Классы и методы
DateTimeFormatter в Java
Advanced Java Practice Set
Java Упражнение 6: Решение | Пользовательский калькулятор
Java Упражнение 7: Система управления библиотекой в Java
Создание собственных документов JavaDocs для нашего пакета
Javadocs: теги для документирования классов
Javadocs: теги методов для создания документации java
Advanced Java 2 — Практический набор
Упражнение 7: Решения + комментарии
Конструктор в Java | Simplilearn
Конструктор в программировании на Java — это блок кода, который инициализирует (конструирует) состояние и значение во время создания объекта.
класс ClassName{
ClassName(){ //создание конструктора
}
}
Помимо инициализации, конструктор в Java также может выполнять другие задачи, такие как вызов метода, создание объектов и запуск потока. В Java также существует отдельный класс Constructor, используемый для получения внутренней информации конструктора.
Конструктор синтаксически подобен методу, но между ними есть несколько различий. Во-первых, хотя конструктор и возвращает текущий экземпляр класса, он не имеет явного возвращаемого типа. Во-вторых, он вызывается неявно, а метод — нет. Однако, как и в случае с методом, в Java существует несколько правил создания конструктора.
Каковы правила создания конструкторов в Java?
Всего определено три правила для создания конструктора.
- Имя конструктора и класса должны совпадать
- Вы не можете указать явное значение для конструктора
- Конструктор не может быть ни одним из следующих: статическим, синхронизированным, абстрактным или окончательным
Здесь следует отметить, что вы можете иметь общедоступный, частный или защищенный конструктор в Java с помощью модификаторов доступа, которые управляют созданием объекта.
Какие существуют типы конструкторов Java?
В зависимости от предоставленных параметров конструкторы Java могут быть двух типов:
- Конструкторы без аргументов
- Конструкторы с параметрами
Конструкторы без аргументов
Как следует из названия, конструкторы без аргументов не имеют аргументов (параметров). Если вы инициализируете несколько объектов с помощью конструктора без аргументов, значения всех объектов будут одинаковыми. Синтаксис конструктора без аргументов в Java:
ИмяКласса(){}
Давайте рассмотрим следующий пример, чтобы лучше понять конструктор без аргументов.
Пример конструктора без аргументов
В следующем примере создается конструктор без аргументов для класса Apple, который будет вызываться при создании объекта.
Конструктор по умолчанию, вызываемый компилятором Java, также является типом конструктора без аргументов, поскольку он не имеет параметров. Давайте рассмотрим следующий пример, чтобы понять, как работает конструктор по умолчанию.
Пример конструктора по умолчанию
Поскольку в приведенном выше примере вы не создали никакого конструктора, компилятор Java вызывает конструктор по умолчанию. Это инициализирует объекты значениями по умолчанию, и то же самое отображается в выводе.
Параметризованные конструкторы
В отличие от конструкторов без аргументов, параметризованные конструкторы могут принимать параметры. Вы можете заставить конструктор принимать любое количество параметров. Вы можете использовать этот тип конструктора для присвоения различных значений объектам во время создания. Вот пример, демонстрирующий работу параметризованного конструктора в Java.
Пример конструктора с параметрами
В следующем примере создается параметризованный конструктор с двумя параметрами для класса Car.
Что такое перегрузка конструктора в Java?
Конструктор в Java почти аналогичен методу. Следовательно, он может быть перегружен, как последний. Перегрузка конструктора позволяет создавать несколько конструкторов с разными списками параметров. Если вы хотите определить более одного конструктора и заставить их выполнять разные задачи, перегрузка — это то, что вам нужно. Компилятор Java различает конструкторы по номерам, последовательности и типам данных их списков параметров. Давайте рассмотрим пример для лучшего понимания.
Пример перегрузки конструктора
Как скопировать значения без конструктора в Java?
В Java нет конструктора копирования. Однако вы по-прежнему можете копировать значения из одного объекта в другой с помощью конструктора. Вот пример копирования значений объекта с помощью конструктора.
Пример копирования значений с помощью конструктора
Существует также несколько других способов копирования значений без использования конструктора в Java, а именно:
- Присвоение значений одного объекта другому
- С помощью метода clone()
Рассмотрим пример копирования значений в Java путем простого присвоения значений из одного объекта другому.
Пример копирования значений без конструктора
В следующем примере значения одного объекта копируются в другой объект без создания конструктора.
Подведение итогов
Java — один из самых популярных и востребованных языков программирования в мире. Следовательно, если вы хотите продолжить карьеру в области разработки программного обеспечения, жизненно важно изучить и понять такие концепции, как конструкторы в Java.