undefined

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

Java Syntax
5 уровень , 8 лекция
Открыта

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

Без использования конструктора С использованием конструктора
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;
  }

…
}
undefined
2
Задача
Java Syntax,  5 уровень,  8 лекция
Недоступна
Набираем код Ӏ Java Syntax: 5 уровень, 8 лекция
Java Syntax: 5 уровень, 8 лекция. Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

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

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

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

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

Комментарии (271)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Gela Chrikishvili 9 уровень, Москва
15 февраля 2021
Ускоренный курс жизни, где вам не за пару лет, а за пару недель успеют сказать: "Изучай это, скоро мы скажем, что бы ты это забыл, потому что это неудобно и никто так не делает" Я не бурчу, в целом суть ясна, от простого к сложному. Развернутый "не скрытый в методах" код могут быстро писать профи. А ученикам проще показывать нутро происходящего, чтобы мы познавали таинства и детали. Спасибо
Стас 9 уровень, Москва
2 февраля 2021
Очень похоже на объяснение как было раньше и как стало теперь. Из всего я понял что пользоваться пока что нужно и проще конструктором. А вот дальше возможно будет новое объяснение или углубление в вопрос " а нужна ли инициализация вообще и где и при каких случаях ее использовать.
27 января 2021
Attention! Dear, JavaRush! Есть небольшая недоработка в задании на повтор кода. В 9 строчке при воде p не выдаёт ошибки. Это мелочь, но тем не менее неточность. Поправьте, пожалуйста. Спасибо!
Rodion 11 уровень, Мюнхен
19 января 2021
не бывает такого, чтобы они были почти одинаковыми. В чем положительные и отрицательные стороны применения initialize по отношению к конструктору???
Андрей Осипов 18 уровень, Барнаул
22 декабря 2020
Отличный курс! Не понимаю почему я его не стал проходить несколько лет назад! Очевидно, что я потерял несколько лет работы на отличной должности. Уже 5 лет работаю тестировщиком и только в конце 2020 года начал учить Java)
Kirill 9 уровень, Москва
15 декабря 2020
Озадачивает порядок выкладки материала. В начале, на прошлых уроках, нам рассказывают о конструкторах, потом зачем-то морочат голову методом initialize, чтобы потом опять вернуться к конструктору. Для полноты "самой необходимой информации" не хватает теперь только главы "А как initialize пишется на Паскале".
Dan 6 уровень, Минск
6 декабря 2020
Напомните мне пожалуйста, причем тут getFolder(что это?)))получается что мы можем создать геттер с переменной созданной в методе initialize, с переданным в него значением, присваемым этой же переменной?)
Angelina Ageeva 20 уровень, Симферополь
2 декабря 2020
Теперь стало понятно, зачем нам объясняли метод initialize(). Чтобы сказать, что конструкторы - это то же самое но проще))) (Хотя ведь это совсем не одно и то же!) Как с циклами while и for.
FrBr 10 уровень, Москва
11 ноября 2020
Спасибо команде JavaRush за черную запятую во втором примере, я неплохо послюнявил монитор пытаясь её стереть.
Nimgvae 10 уровень, Брауншвейг
27 октября 2020
Признаться был знаком уже с Конструкоторами, но не знался с initialize(). Шел по лекции в надежде, что у последнего будет какая то фишечка, но интрига сдохла в конце этой странички)))). В любом случае пока все отличненько.Хоть и бесит порой онлайн кампилятор)))