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

Открыта

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

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

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

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

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

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

Комментарии (195)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Илья7 уровень, Одинцово
13 May, 13:07
на самом деле если мне не изменяет память, о конструкторах что-то говорилось на 2 уровне после 9 лекции или в ней.
Миша8 уровень, Сранопипирск
10 May, 09:50
Добрый день, сегодня мы научим вас как из бритвы сделать нож для хлеба. Добрый день, сегодня мы научим вас брать нож для хлеба.
3 May, 18:27
MyFile file = new MyFile();
file.initialize("c:\data\", "a.txt");
String text = file.readText();
здесь опечатка. Должно быть так:
MyFile file = new MyFile();
file.initialize("c:\data\\", "a.txt");
String text = file.readText();
Вячеслав7 уровень
5 May, 15:38
Ну тогда и первый слэш надо "слэшить")
Григорий Баканов8 уровень, Новороссийск
5 May, 15:42
Не обязательно. Просто второй слеш делает кавычки обычным знаком внутри текста, а первый не на что не влияет. P.S. Затупил, извиняюсь)
Вячеслав7 уровень
6 May, 13:17
3й уровень, 6я лекция - экранирование. Там ещё задание было вывести на экран It's Windows path: "C:\Program Files\Java\jdk1.7.0\bin" It's Java string: \"C:\\Program Files\\Java\\jdk1.7.0\\bin\" Каждая косая черта должна была быть экранирована. Из этой логики должно быть "c:\\data\\"
Григорий Баканов8 уровень, Новороссийск
8 May, 08:22
Точняк, ты совершенно прав, снимаю шляпу...
Maxim8 уровень, Санкт-Петербург
30 April, 14:08
35 уровней впереди... Надо бы передохнуть.
valentin8 уровень, Москва
28 April, 07:33
Как я понял что методы гетеры и сетеры, инициализация и конструкторы это все одно и тоже. Конструктор самый простой короче и поэтому его сейчас применяют. Я правильно понял???
Эдуард 7 уровень
29 April, 21:16
геттеры и сеттеры это не тоже самое, что конструктор. Вернись к лекциям и еще раз прочти) а вот инициализация и конструктор, одно и тоже, только конструктор компактнее и поудобнее
valentin8 уровень, Москва
29 April, 21:31
Гетеры и сетеры для ввода и вывода данных. Конструктор для инициализации полей, ну и навсякий случай пустых полей. Так?
Эдуард 7 уровень
30 April, 10:57
геттер для получения значения поля, если оно private, сеттер для присвоения значений полю обьекта.
Артем16 уровень, Москва
2 May, 08:27
инициализация может выполняться в любой момент после создания объекта вручную. конструктор же автоматически вызывается в момент создания объекта. вручную ты его не запустишь.
Леонель Хантер14 уровень, Нур-Султан
24 April, 16:23
не по-русски как то знакомят опять) через перегрузку методов с конструкторами
dunga6 уровень
21 April, 22:28
не знаю может кому то мой опыт поможет - под музыку в наушниках концентрация куда выше (r) =)
Alejandro 200011 уровень, Москва
21 April, 11:31
initialize изучался для того, чтобы оценить практичность конструктора?)
Леонель Хантер14 уровень, Нур-Султан
24 April, 16:15
🤣🤣🤣
MAX14 уровень, Киров
16 April, 17:52
А, ну всё понятно. Это и есть конструктор в конечном итоге.
At0m8 уровень, Екатеринбург
9 April, 14:09
Если еще не смотрели, рекомендую) https://youtu.be/Muytoo-x-KM