JavaRush /Курсы /Java Syntax /Конструкторы

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

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;
  }

…
}
5
Задача
Java Syntax Pro, 5 уровень, 8 лекция
Недоступна
Переобуваемся на лету
Потренируйся определять и изменять значения переменных во время выполнения программы: 1. Поставь break point напротив вызова метода println и запусти программу в режиме отладки. 2. После остановки нажми F8 ровно 9 раз. 3. Посмотри, какое значение сейчас у переменной correction и установи такое же з

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

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

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

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

5
Задача
Java Syntax Pro, 5 уровень, 8 лекция
Недоступна
Выполнение фрагмента кода
Потренируйся выполнять фрагмент кода во время работы программы: 1. Поставь break point напротив вызова метода println и запусти программу в режиме отладки. 2. После остановки нажми Alt+F8 и выполни следующий код: loop.replaceAll("\\W", "").split("fahrenheit")[1] 3. Результат выполнения кода присво
Комментарии (311)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Кирилл Уровень 41
11 октября 2024
б) У метода-конструктора нет типа (никакой тип не указывается вообще). уточните тогда уж что нету типа возвращаемого значения. А название класса это название типа нового объекта создаваемого нами. new MyFile() это создание объекта типа MyFile. А вот типа возвращаемого значения как в блоке инициализации нету - public void initialize(String folder, String name), где void как раз тип возвращаемого значения которого не бывает в конструкторе.
ivankoffpavel Уровень 19
26 апреля 2023
Конструктор не имеет return Type
Maxim Belich Уровень 28
28 февраля 2023
Класс имеет доступ package, а конструктор Public. Гении ))
AMIGO_2022_11_09 Уровень 17
15 ноября 2022
Когда лучше применять метод initialize, а когда конструктор?
Artur Kupchenko Уровень 28
8 ноября 2022
Правильно ли я понял. Нам сначала дали кучу задач по методу initialize. А потом говорят что метод initialize не очень хороший, и нужно пользоваться конструкторами.
Mudril Уровень 28
18 декабря 2022
Да. Вроде как раньше не было конструкторов, поэтому все делали через метод. Нет причин использовать initialize, если ты можешь использовать конструктор взамен.
Dinislam Aminev Уровень 16 Expert
28 января 2023
Тоже самое было и с классом Scanner, типа есть такой класс. Но использовать лучше BufferReader )))
zero to hero Уровень 44
7 марта 2023
Да, учить сначала одному, прорешать 10 задач, акцентировать в лекциях. Потом сказать оно не надо, есть метод лучше. Тоже жопа горит уже)_
Benjam1nBTN Уровень 24
4 августа 2022
В JR всё меняется в режиме реального времени: я же совсем недавно читал про конструкторы, и вот опять как в первый раз…)
18 февраля 2022
Еще у конструктора нету void в отличии от initialize.
mesler_ Уровень 24
22 ноября 2022
итак написано что у него нет типа
Владислав Уровень 16
23 марта 2023
типы это например "булиэн" у метода, а воид - отсутствие возврата значения. Потому заметка хорошая от человека.
Dffay Уровень 9
17 февраля 2022
Правильно ли я понял, что при инициализации, в переменные метода мы можем указывать переменные класса которые даже еще не объявляли?
BOB Уровень 18
27 августа 2022
в методе мы присваиваем переменной класса(this.name) значение аргумента метода(name). А потом, когда вводим значение параметра метода, оно присваивается переменной класса.
Сергей Уровень 2
16 февраля 2022
Зачем переменную класса инициализировать "null"?

private String filename = null;
Ведь программа скомпилируется и без "null", что это дает?
ivankoffpavel Уровень 19
26 апреля 2023
private String filename; тоже самое
EvGenbl4 Уровень 14
28 января 2022
У метода-конструктора нет типа (никакой тип не указывается вообще). Тут речь идёт о типе возвращающего значения(например void)