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

Открыта

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

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

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

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

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

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

2
Задача
Java Syntax,  5 уровень,  8 лекция
Недоступна
Набираем код Ӏ Java Syntax: 5 уровень, 8 лекция
Java Syntax: 5 уровень, 8 лекция. Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).
Комментарии (207)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Dmitriy Tsoy6 уровень, Санкт-Петербург
8 часов назад
Люблю Элли, она объясняет. А Диего только задачи пачками носит
Viktor8 уровень, Ивано-Франковск
30 июля, 15:39
правая кнопка > Copy > ctrl + v
Серега5 уровень, Кривой Рог
26 июля, 09:43
https://www.youtube.com/playlist?list=PLyApprAtr5yjywFgRkxhfGfesgYoIhU8U
Sergei Kirov6 уровень, Санкт-Петербург
11 июля, 21:47
public MyFile(MyFile file, String name) Не понимаю эту строчку. Это новый объект внутри конструктора?Как он тут оказался? Помогите разобраться пожалуйста!)
Вячеслав8 уровень, Кривой Рог
12 июля, 11:59
Тут мы передаем в конструктор ссылку на другой(уже созданный ранее файл) чтобы потом внутри конструктора считать его адрес методом getFolder()
Lou Ashby5 уровень, Владимир
вчера, 15:38
ого!
Konstantin Kapin8 уровень
6 июня, 13:11
а может кто-нибудь объяснить, как гэттэр тут работает и почему он так пишется в скобках? public void initialize(MyFile file, String name) в других случаях мы пишем MyFile.initialize(String, int), а в примере с гэттером что указывать?
Денис Латыпов14 уровень, Долгопрудный
25 июня, 09:43
Потомучто это не геттер, геттер всегда чтото возращает return ключевое слово должно быть. public void initialize(MyFile file, String name) а это метод инициализации. public MyFile(String folder, String name) это конструктор, сокращеная запись метода инициализации.
Дима Сидельников7 уровень, Варшава
3 июня, 18:38
Доступно и понятно про конструкторы можно посмотреть здесь
Nicha8 уровень
8 июля, 08:19
Сразу прояснилось, что куда и зачем )
Илья8 уровень, Одинцово
13 мая, 13:07
на самом деле если мне не изменяет память, о конструкторах что-то говорилось на 2 уровне после 9 лекции или в ней.
Миша16 уровень, Сранопипирск
10 мая, 09:50
Добрый день, сегодня мы научим вас как из бритвы сделать нож для хлеба. Добрый день, сегодня мы научим вас брать нож для хлеба.
3 мая, 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();
Вячеслав10 уровень
5 мая, 15:38
Ну тогда и первый слэш надо "слэшить")
Григорий Баканов8 уровень, Новороссийск
5 мая, 15:42
Не обязательно. Просто второй слеш делает кавычки обычным знаком внутри текста, а первый не на что не влияет. P.S. Затупил, извиняюсь)
Вячеслав10 уровень
6 мая, 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 мая, 08:22
Точняк, ты совершенно прав, снимаю шляпу...
Maxim8 уровень, Санкт-Петербург
30 апреля, 14:08
35 уровней впереди... Надо бы передохнуть.
Евгений Винников8 уровень, Харьков
4 июля, 21:19
А кто то уже стал лучше,возвращайся,тут нельзя сдаваться)