Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Гарантированная инициализация при использовании конструктора

Читайте также:
  1. Вызов конструктора из конструктора
  2. Глава 1. Двадцать примеров революционных преобразований в использовании энергии
  3. Дадим конструкторам шанс
  4. Задание 13. Составьте меню элементов строительного конструктора. Создайте архитектурное сооружение.
  5. Инициализация массива
  6. Инициализация с наследованием
  7. Инициализация статических данных
  8. Об использовании безвозмездно полученных средств
  9. ОБ ИСПОЛЬЗОВАНИИ ПРЕПАРАТА ГЕМОВИТ-ПЛЮС ПРИ НАРУШЕНИЯХ ОБМЕНА ВЕЩЕСТВ И АЛЛЕРГИЯХ РАЗЛИЧНОЙ ЭТИОЛОГИИ У КОШЕК И СОБАК

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

Следующая сложность состоит в названии метода. Есть две проблемы. Первая заключается в том, что любое имя, которое вы используете, может совпасть с именем, которое вы захотите использовать в качестве члена класса. А вторая заключается в том, что, так как компилятор отвечает за вызов конструктора, то он всегда должен знать, какой метод вызывать. Решение, принятое в C++ кажется простым и логичным, так что оно также используется в Java: имя конструктора совпадает с именем класса. Это имеет смысл, так как такой метод будет вызван автоматически при инициализации.

Вот пример класса с конструктором:

//: c04:SimpleConstructor.java// Демонстрация простого конструктора. class Rock { Rock() { // это конструктор System.out.println("Creating Rock"); }} public class SimpleConstructor { public static void main(String[] args) { for(int i = 0; i < 10; i++) new Rock(); }} ///:~

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

new Rock();

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

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

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

//: c04:SimpleConstructor2.java// конструктор может иметь аргументы. class Rock2 { Rock2(int i) { System.out.println("Creating Rock number " + i); }} public class SimpleConstructor2 { public static void main(String[] args) { for(int i = 0; i < 10; i++) new Rock2(i); }} ///:~

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

Tree t = new Tree(12); // 12-ти футовое дерево

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

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

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




Дата добавления: 2015-09-11; просмотров: 26 | Поможем написать вашу работу | Нарушение авторских прав

Вставка HTML | Упражнения | Присвоение | Математические операторы | Операторы сдвига | Литералы | Руководство по операторам | Итерации | Break и continue | Детали расчета |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав