Учитель elly

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

Открыта

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

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

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

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

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

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

Комментарии (131)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Мария6 уровень, Киев
воскресенье, 15:58
Я тут короче читаю лекции, решаю задачи.а смысла не понимаю вообще. что делать?
Aleksandr7 уровень, Санкт-Петербург
воскресенье, 21:46
Вернуться и перечитать еще.)) Пока не станет понятно.
Николай8 уровень, Санкт-Петербург
10 сентября, 10:02
Я ожидал, что в статье будет указано еще одно отличие метода Initialize() от конструктора (из материалов прошлых лекций): - метод Initialize() можно вызывать сколько угодно раз, а конструктор вызывается только один раз при создании экземпляра класса
tetzura yana8 уровень, Киев
23 августа, 22:52
подскажите пожалуйста в примере, который нужно набрать public MyFile(MyFile file, String name) - MyFile file - это создание переменной класса? Зачем?
Albert8 уровень, Санкт-Петербург
27 августа, 09:44
в этот методе в качестве параметров мы передаем другой объект и имя (в данном примере - это другой файл, находящийся в определенной папке + имя нового файла).
this.filename = file.getFolder() + name;
а тут мы уже гетером получаем директорию, где находиться уже существующий файл и прибавляем имя файла нового объекта - тем самым получаем полное имя файла нового объекта (он будет создан в той же директории, где находиться и ранее созданный)
WantToSleep24 уровень, Москва
4 августа, 17:07
давайте конструкторы
WantToSleep24 уровень, Москва
4 августа, 17:07
Пишешь , пишешь эти иницилиазотры , а потом ...!..
Николай Дудин9 уровень, Йошкар-Ола
16 июля, 17:44
До прочтения этой статьи были непонятки с инициализацией и конструкторами и this. Советую: Конструкторы классов в Java
Ihor Biedin22 уровень, Днепр
9 июля, 18:28
Вроде тоже кажется, что должен помогать набор текста. Но все равно при вводе, думаешь не о том, как работает, а просто чтоб набрать. Вообщем фича ради фичи.
Viktor Gromov11 уровень
11 июля, 13:02
Так вроде в этом цель и есть. Натренировать печатать, дать выучить конструкции. Чтобы потом, когда начали кодить, не было такого "public или publik?" (тупой пример, но как-то так). Рука сама будет печатать нужные символы. Другое дело, это подается в слишком маленьких количествах, да и обмануть эту штуку легко - обычным копированием.
Людмила11 уровень
25 июня, 09:51
подозреваю, что желающих повторить код до меня не было- иначе бы давно выявили эту багу
Людмила11 уровень
25 июня, 09:37
Всем привет. Почему пытаюсь повторить набор кода и сразу после ввода первой фигурной скобки все окрашивается розовым. Вроде потом все правильно, но все равно ничего не меняется- окрас остается
Kirill Bogdanov16 уровень, Москва
25 июня, 10:41
То, что ты вводишь, построчно сравнивается с тем, что должно быть в итоге. Когда ты пишешь первую скобку, у тебя автоматически добавляется закрывающая скобка через строку, в то время как проверялка ожидает в этой строке не скобку, а другой код. Поэтому система думает, что есть ошибка и красит в розовый. Если окрас не пропадает после полного ввода кода, значит где-то у тебя опечатка
Alexander Fominsky20 уровень, Санкт-Петербург
7 июня, 15:06
int StepToBeJavaProgrammer++;
Юрий Никитин7 уровень, Львов
23 июня, 10:16
я бы сказал, лично у тебя, это минус один шаг. Потому, что вот это StepToBeJavaProgrammer++. это String "StepToBeJavaProgrammer++"
Никита Бабченко18 уровень, Москва
29 июня, 23:57
Можно ещё круче. Переменная только только инициализировалась и делает плюс один, а материала уже много было)
Andrew28 уровень, Москва
7 июля, 12:28
Нельзя сделать такую операцию с неициализированной переменной.
Александр7 уровень, Москва
9 июля, 15:16
Она только объявилась, инициализации не было)
progr8 уровень
4 августа, 20:19
ахахха, за полтора месяца перешагал 15 уровней, видимо он спешит, понятно почему он ошибся