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

Открыта

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

Без использования конструктора С использованием конструктора
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( MyFile 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, но с небольшими отличиями. Вроде понятно.

Комментарии (99)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Roman Kocherha8 уровень
понедельник, 15:36
Здесь куда лучше объясняться: https://javarush.ru/groups/posts/1926-zachem-nuzhnih-konstruktorih
Denis6 уровень
воскресенье, 22:08
Я не понял имя конструктора пишется с большой буквы или с маленькой как метод?
Игорь7 уровень, Москва
11 февраля, 17:18
Теперь ясно, что когда после ключевого слова new мы пишем имя класса со скобками, то на самом деле мы просто вызываем конструктор класса (С)
Boris Bashkatov7 уровень, Sumy
25 января, 00:21
В сафари половину кода не видно
Владимир Павленко19 уровень, Москва
9 февраля, 11:42
на экран не поместил, но в Хроме горизонтальный скрол есть
Владимир11 уровень, Москва
8 января, 16:49
Подача материала несколько удивляет. Рекомендую прочитать это перед следующими задачами.
Игорь7 уровень, Москва
11 февраля, 14:21
спасибо. Очень вовремя.
Олег19 уровень, Киев
15 декабря 2018, 11:00
подскажите, почему в скобках указан тип ссылки + имя, разве там не должно быть просто имя? первая таблица, первая колонка, 5 - я строка (на фото подчеркнуто желтым):
Илья19 уровень
20 декабря 2018, 22:01
ты прав, должно быть просто имя. чиркани админу, чтоб поправил
Дмитрий Белл9 уровень, Москва
16 января, 10:42
примеры с ошибками? )))))
Илья19 уровень
17 января, 21:33
Тут дофига чего с ошибками. Чтоб не расслаблялись, значицца...
Rolik1 уровень, Харьков
1 февраля, 16:12
Ошибки нет. Это объект переданный в параметры метода. Правда, не знаю зачем его здесь выложили. Это когда до потоков выполнения дойдете, там таких вот "ошибок" валом будет.
Dmitry Deryuga27 уровень
30 октября 2018, 18:56
Подскажите, пожалуйста, зачем вообще инициализировать переменные? В первых лекциях по переменным утверждали, что все переменные имеют различные значения "по умолчанию" после их объявления в зависимости от типа переменной. Сейчас же заставляют эти значения "по умолчанию" прописывать в коде...
Вадим20 уровень, Одесса
11 декабря 2018, 17:59
чтобы в них были не случайные значение, а те которые вы решили...
Dmitry Deryuga27 уровень
11 декабря 2018, 19:33
Есть правила неявной инициализации примитивов. Они не могут быть случайными...Ответом на вопрос, скорее всего, является генерирование эксепшинов при подтягивании в метод не инициализированных переменных.
Вадим20 уровень, Одесса
12 декабря 2018, 12:57
а вторым ответом может являться то, что это просто хороший стиль программирования. :)
Tatsuya6 уровень, Оренбург
28 июля 2018, 20:11
/* Комментарий удален */
Natalia11 уровень, Москва
17 июля 2018, 20:23
Очень раздражает постановка скобок в C-style. Обычно в Java скобки ставятся на той же строке, что и название функции. Пальцы привыкли по другому расставлять
Ванчо-Барабанчо8 уровень, Минск
1 августа 2018, 22:20
Такое расположение скобок намного легче прочитать. Это пока что у нас задания за 20 - 50 строчек, а на самом деле задачи бывают и 5000 строк, и больше. Так что лучше переучиться!
Natalia11 уровень, Москва
2 сентября 2018, 00:25
кому как)) мне например, проще в java-style читать скобки :) дело привычки. На сайте oracle стиль другой, не такой как здесь.
Livs29 уровень
22 мая 2018, 21:59
И ещё. Может ли в одном классе быть несколько конструкторов? И если Да, то сколько?
Rihard198533 уровень
26 мая 2018, 22:15
А можно вопрос к Вам как за 5 дней вы с 5 уровня на 29 поднялись?)) Тут тоже можно читы включать?)
Livs29 уровень
30 мая 2018, 19:49
А откуда взялось магическое число 5 ?
Rihard198533 уровень
30 мая 2018, 19:53
Ну Вы задали этот вопрос 22 мая на 5-м уровне и 8-й лекции, или вы сюда чайников начинающих подразнить с Олимпа пришли)))
Livs29 уровень
30 мая 2018, 20:18
И мысли такой не было - дразниться! Лично я часто возвращаюсь к пройденному материалу, т.к. не всё понятно с первого раза, и на определенном этапе чтобы уяснить остаточно, приходится повторять материал
Rihard198533 уровень
31 мая 2018, 10:56
Можно тогда спросить дальше намного ли сложнее чем в начальных этапах? У меня чувство что Core это самый сложный уровень
Александр16 уровень, Казань
6 июля 2018, 10:23
Как на счет того, чтобы ответить на свой же вопрос?)
Rihard198533 уровень
6 июля 2018, 13:59
Информации очень много , но пока терпимо. На начальных этапах задачи решал в 100% случаев и скорость прохождения была выше. А сейчас решается 60-70% задач и скорость падает так кода стало больше
Александр16 уровень, Казань
8 июля 2018, 12:52
Вот значит зачем материя нужна))
Rihard198533 уровень
8 июля 2018, 13:00
Если на начальных этапах наберешь много материи то до 25 уровня думаю хватит если на курсе ядро половина задач только решать
Александр16 уровень, Казань
8 июля 2018, 13:05
"если на курсе ядро половина задач только решать" - ?
Rihard198533 уровень
8 июля 2018, 14:18
Курс ядро Java это с 11 по 20 уровни, где с процедурного кода в блоке main ты начинаешь переходить к основам ООП , каждый обычный класс в своем файле. А так с 11 по 15 уровни за парочку дней пройдешь там детские задачи легче чем на первых уровнях где надо вспоминать математику.
Rolik1 уровень, Харьков
30 июля 2018, 07:43
Чем лучше сейчас вы освоите азы, тем легче вам будет дальше. И наоборот, если будете рваться вперед в погоне за левелами, игнорируя понимание основ, тем больше будете путаться в будущем.
Ванчо-Барабанчо8 уровень, Минск
1 августа 2018, 22:23
На самом деле конструкторов может быть сколько вы хотите, но главное не переусердствовать, а то и запутаться можно.
Алексей9 уровень, Санкт-Петербург
28 декабря 2018, 22:23
Мне кажется конструкторов, как и инициализаторов, не может быть бесконечное множество. Задача с котами и 4мя инициализаторами в предыдущей лекции дала четко понять, что если у нас 4 переменные типа int, то и инициализаторов получается только 4, с одним, двумя, тремя или четырьмя параметрами типа int.