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

Открыта

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

Без использования конструктора С использованием конструктора
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;
  }}
6
Задача
Java Syntax,  5 уровень,  8 лекция
Недоступна
Набираем код
Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

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

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

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

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

Комментарии (123)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Николай Дудин7 уровень, Йошкар-Ола
вторник, 17:44
До прочтения этой статьи были непонятки с инициализацией и конструкторами и this. Советую: Конструкторы классов в Java
Ihor Biedin9 уровень, Днепр
9 июля, 18:28
Вроде тоже кажется, что должен помогать набор текста. Но все равно при вводе, думаешь не о том, как работает, а просто чтоб набрать. Вообщем фича ради фичи.
Viktor Gromov7 уровень
11 июля, 13:02
Так вроде в этом цель и есть. Натренировать печатать, дать выучить конструкции. Чтобы потом, когда начали кодить, не было такого "public или publik?" (тупой пример, но как-то так). Рука сама будет печатать нужные символы. Другое дело, это подается в слишком маленьких количествах, да и обмануть эту штуку легко - обычным копированием.
Людмила8 уровень
25 июня, 09:51
подозреваю, что желающих повторить код до меня не было- иначе бы давно выявили эту багу
Людмила8 уровень
25 июня, 09:37
Всем привет. Почему пытаюсь повторить набор кода и сразу после ввода первой фигурной скобки все окрашивается розовым. Вроде потом все правильно, но все равно ничего не меняется- окрас остается
Kirill Bogdanov9 уровень, Москва
25 июня, 10:41
То, что ты вводишь, построчно сравнивается с тем, что должно быть в итоге. Когда ты пишешь первую скобку, у тебя автоматически добавляется закрывающая скобка через строку, в то время как проверялка ожидает в этой строке не скобку, а другой код. Поэтому система думает, что есть ошибка и красит в розовый. Если окрас не пропадает после полного ввода кода, значит где-то у тебя опечатка
Alexander Fominsky20 уровень, Санкт-Петербург
7 июня, 15:06
int StepToBeJavaProgrammer++;
Юрий Никитин7 уровень, Львов
23 июня, 10:16
я бы сказал, лично у тебя, это минус один шаг. Потому, что вот это StepToBeJavaProgrammer++. это String "StepToBeJavaProgrammer++"
Никита Бабченко7 уровень, Москва
29 июня, 23:57
Можно ещё круче. Переменная только только инициализировалась и делает плюс один, а материала уже много было)
Andrew17 уровень, Москва
7 июля, 12:28
Нельзя сделать такую операцию с неициализированной переменной.
Александр6 уровень, Москва
9 июля, 15:16
Она только объявилась, инициализации не было)
Alexandr Ikert27 уровень, Москва
21 марта, 10:43
Верно + 1 шаг к цели ))))
Александр9 уровень, Москва
30 апреля, 13:21
ну давай теперь каждый это будет писать
Alexandr Ikert27 уровень, Москва
1 мая, 14:16
давай)
Евгений9 уровень
19 мая, 14:38
скажи спасибо, что не про черную материю...
Sergey13 уровень
17 марта, 13:06
+ 1 шаг к цели "Стать Java-программистом"
ildwine31 уровень
15 марта, 05:21
Alt + Insert позволяет быстро вставлять конструкторы с разным количеством параметров, геттеры и сеттеры.
Александр9 уровень
15 марта, 11:26
Благодарствую!
Алексей10 уровень
28 апреля, 14:55
Огромное спасибо!
Alex_330298738 уровень, Москва
5 июня, 06:41
если начать писать get или set, Идея сама предлагает конструкцию с переменными...
dan_jar6 уровень
9 марта, 14:59
я в видеокурсе один пока проходил изучил конструкторы
Roman Kocherha8 уровень
18 февраля, 15:36
Здесь куда лучше объясняться: https://javarush.ru/groups/posts/1926-zachem-nuzhnih-konstruktorih