1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
4.1 用构造器自动初始化.md 8.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

4.1 Автоматическая инициализация с помощью конструктора

При создании метода можно представить себе, что каждый вызываемый объект класса автоматически проходит через initialize(). Это название напоминает нас о необходимости выполнить этот вызов перед использованием объекта. Однако это также означает, что пользователю придётся запомнить эту необходимость. В Java благодаря специальному методу, называемому "конструктором", дизайнер класса может гарантировать правильную инициализацию каждого объекта. Если класс имеет конструктор, то при создании объекта Java автоматически вызывает этот конструктор — даже если пользователь об этом не догадывается. Таким образом, это гарантируется!

Следующий вопрос заключается в том, как назвать этот метод. Здесь есть две проблемы. Первая состоит в том, что любое имя, которое мы используем, может столкнуться с конфликтами с именами членов класса. Вторая проблема заключается в том, что компилятор должен знать, какой метод ему следует вызвать, поскольку его обязанностью является вызов конструктора. C++ использует простой и логичный подход, который был применён и в Java: имя конструктора совпадает с именем класса. Так обеспечивается гарантия того, что такой метод будет автоматически вызван во время инициализации.Ниже приведен пример простого класса с конструктором (если возникают проблемы при выполнении данного программного кода, обратитесь к разделу "Присваивание" главы 3).

//: SimpleConstructor.java
// Демонстрация простого конструктора
package c04;

class Rock {
  Rock() { // Это конструктор
    System.out.println("Создание камня");
  }
}

public class SimpleConstructor {
  public static void main(String[] args) {
    for(int i = 0; i < 10; i++)
      new Rock();
  }
} ///:~

Теперь, когда создается объект:

new Rock();

выделяются соответствующие области памяти, и вызывается конструктор. Это гарантирует, что объект будет правильно инициализирован до того, как вы сможете им воспользоваться. Обратите внимание, что правило использования строчной буквы для первого символа имени метода не применяется к конструктору. Это связано с тем, что имя конструктора должно точно совпадать с именем класса!

Как и любой другой метод, конструктор может принимать аргументы, чтобы мы могли указать конкретный способ создания объекта. Пример выше легко модифицировать таким образом, чтобы конструктор использовал свои собственные параметры. Например:

class Rock {
  Rock(int i) {
    System.out.println(
      "Создание камня номер " + i);
  }
}
``````java
public class SimpleConstructor {
  public static void main(String[] args) {
    for(int i = 0; i < 10; i++) 
      new Rock(i);
  }
}

Используя параметры конструктора, мы можем установить соответствующие параметры для инициализации объекта. Например, если у нас есть класс Tree, имеющий конструктор с целочисленным параметром, который указывает высоту дерева, то мы можем создать объект следующим образом:

new Tree(10); // Создание объекта Tree с высотой 10
``````markdown
дерево t = новый Дерево(12); // дерево высотой в 12 футов

Если Дерево(int) является нашим единственным конструктором, компилятор не позволит нам создать объект этого типа каким-либо другим способом.

Конструкторы помогают решить множество проблем, связанных с классами, и делают код более читаемым. В приведённом выше примере мы не видим явного вызова метода инициализировать(). Эти методы являются самостоятельными и независимыми от содержания класса. В Java определение и инициализация объединены в одном понятии — они неделимы.

Конструктор представляет собой специальный тип метода, так как он не имеет значения возврата. Это отличается от значений возврата типа void. Для методов со значением возврата void хотя бы сам метод не возвращает ничего, но его можно заставить вернуть что-то ещё. Конструктор же не просто не возвращает никаких значений автоматически, но и вообще не может вернуть ничего. Если значение возврата существует, и если допустить возможность выбора того, что будет возвращено, компилятору придётся знать, как обрабатывать это значение возврата.

Перевод:

дерево t = новый Дерево(12); // дерево высотой 12 футов

Если Дерево(int) является нашим единственным конструктором, компилятор не позволит нам создать объект этого типа каким-либо другим способом.

Конструкторы помогают решить множество проблем, связанных с классами, и делают код более читаемым. В приведённом выше примере мы не видим явного вызова метода инициализировать(). Эти методы являются самостоятельными и независимыми от содержания класса. В Java определение и инициализация объединены в одном понятии — они неделимы.

Конструктор представляет собой специальный тип метода, так как он не имеет значения возврата. Это отличается от значений возврата типа void. Для методов со значением возврата void хотя бы сам метод не возвращает ничего, но его можно заставить вернуть что-то ещё. Конструктор же не просто не возвращает никаких значений автоматически, но и вообще не может вернуть ничего. Если значение возврата существует, и если допустить возможность выбора того, что будет возвращено, компилятору придётся знать, как обрабатывать это значение возврата.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master