Конструкторы

Открыта

— Самое время рассказать тебе о конструкторах. Всё очень просто: программисты придумали сокращённую запись создания и инициализации объекта:

Без использования конструктора С использованием конструктора
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");
String text = file.readText();
MyFile file = new MyFile("c:\data\a.txt");
String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\", "a.txt");
String text = file.readText();
MyFile file = new MyFile("c:\data\", "a.txt");
String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

MyFile file2 = new MyFile();
file2.initialize(file, "a.txt");
String text = file2.readText();
MyFile file = new MyFile("c:\data\a.txt");


MyFile file2 = new MyFile(file, "a.txt");
String text = file2.readText();

— А я только с initialize закончил разбираться…

— А ты внимательнее посмотри. Использование конструкторов удобнее и компактнее.

— Так компактнее, да. Но есть вопрос: как написать в классе метод initialize я знаю, а как внутри класса написать конструктор?

— Посмотри сначала на небольшой пример:

Без использования конструктора С использованием конструктора
class MyFile
{
  private String filename = null;

  public void initialize(String name)
  {
    this.filename = name;
  }

  public void initialize(String folder, String name)
  {
    this.filename = folder + name;
  }

  public void initialize(MyFile file, String name)
  {
    this.filename = file.getFolder() + name;
  }}
class MyFile
{
  private String filename = null;

  public MyFile(String name)
  {
    this.filename = name;
  }

  public MyFile(String folder, String name)
  {
    this.filename = folder + name;
  }

  public MyFile(MyFile file, String name)
  {
    this.filename = file.getFolder() + name;
  }}
2
Задача
Java Syntax,  5 уровень,  8 лекция
Недоступна
Набираем код
Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

— Объявить конструктор в классе очень легко. Конструктор — это тот же метод initialize, но с двумя отличиями:

а) Имя метода-конструктора совпадает с именем класса (вместо initialize).

б) У метода-конструктора нет типа (никакой тип не указывается вообще).

— Фактически тот же метод initialize, но с небольшими отличиями. Вроде понятно.

Комментарии (171)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Александр7 уровень, Днепр
18 февраля, 09:57
Александру Петрухину. Большое спасибо.Бомба.
Александр Петрухин9 уровень, Энгельс
17 февраля, 18:12
Гораздо веселее в идее вместо перепечатывания одних и тех же букв создавать конструкторы таким образом: Alt+ins(generate) - Constructor - выбор аргументов (в нужном порядке) - Enter
Ришат7 уровень
среда, 18:25
Супер комментарий! Очень помог!
Алексей7 уровень, Москва
15 февраля, 13:13
Конструктор обязательно должен называться также как и имя класса?
Руслан Музыка7 уровень, Dergachi
пятница, 12:50
да
Slava7 уровень, Екатеринбург
8 февраля, 05:33
может ли конструктор возвращать значение тут нету не return не void . что он тогда возвращает или у него по стандарту void
Justinian41 уровень, Киев
16 февраля, 21:16
а кому он должен возвращать? Конструктор в недрах джавы имеет возвращаемое значение - void. Но синтаксически, это особый вид метода, который не имеет явно указанного типа возвращаемого значения, его имя должно совпадать с именем класса. Если написать так:
class Cat() {
 void Cat() {
}
}
то это уже не конструктор - есть тип возвращаемого значения.
сlass Cat {
 public cat() {
}
}
и здесь конструктора нет - ошибка компиляции, имя конструктора и имя класса не совпадает
Денис7 уровень, Набережные Челны
3 февраля, 15:13
В книге Философия Java есть упоминания про initialize, но там сразу на конструкторах все строится
Игорь8 уровень, Красноярск
3 февраля, 15:18
Как я понял конструктор используется в момент создания объекта. Прописав метод initialize, вызывая его в программе можно менять параметры уже созданного объекта, при этом пачкой, а не по одному.
Александр28 уровень, Москва
25 января, 01:16
Непонятно - зачем стоило париться в предыдущих лекциях с "initialize"? Неужели нельзя было сразу с конструкторов начинать?
Peter18 уровень, Москва
2 февраля, 10:38
Знаете, почему сайты с топ-10 всякой чепухи всегда выводят эту десятку по одной позиции на странице с кнопочкой "дальше" внизу? Можно же сразу все на одной странице показать. Потому что в первом случае вы перезагрузите страницу несколько раз (в идеале 10) и, значит, вам покажут рекламу 10 раз, а не 1. Вот и автор сайта тоже очень-очень-очень хочет побольше денежек.
Olga Lucas6 уровень, Санкт-Петербург
13 февраля, 07:57
Странный вопрос в духе: "Зачем мне в школе история(информатика), я ж не какой-нибудь гуманитарий(технарь)!"
Сергей12 уровень, Самара
13 января, 12:46
если есть конструктор с параметрами, то нельзя создать объект без параметров?верно?
Irina Alymova20 уровень, Киев
14 января, 09:01
да, нужно создавать отдельный нулевой конструктор, чтобы создать объект без параметров (либо не создавать ни одного конструктора)
Gayrat Turabekov8 уровень
6 января, 09:27
конструктор крут
Мариам10 уровень, Columbus
1 января, 22:53
просто public и имя такое же как у класса и никакого void писать не надо - это и есть КОНСТРУКТОР
leksa15 уровень, Москва
24 октября 2019, 14:22
то есть вместо void inintialize пишем просто имя класса? И это получается конструктор? было: public void initialize() конструктор: public Имя_класса() И что тут особо сократилось?
Oleg Khlebnikov9 уровень, Усинск
25 октября 2019, 01:46
Теперь при создании объекта ты можешь сразу указать необходимые параметры, а не вызывать еще один метод в новой строке
Dmitriy22 уровень
1 ноября 2019, 17:50
да и к тому же, если надо создать объект с обязательными начальными параметрами, то с помощью инициалиации через конструктор тебе сам компилятор не даст создать новый объект без них
Евгений Кравченко19 уровень, Омск
24 ноября 2019, 07:09
Я ведь так могу и перегрузить конструктор без параметров и будет несколько конструкторов на случай жизни. Тогда не будет ошибки.