При создании метода можно представить себе, что каждый вызываемый объект класса автоматически проходит через 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 )