1. Создание объекта
Вот мы и дошли до созданий объектов. Вы уже сталкивались с этим ранее, просто сейчас мы разберем эту тему более подробно. На самом деле создавать объекты очень просто.
Чтобы создать объект, нужно использовать оператор new. Выглядит создание объекта примерно так:
new Класс(параметры)
Чаще всего, сразу после создания объекта, ссылку на него мы сохраняем в переменную, которая тоже очень часто имеет такой же тип, что и создаваемый объект. Поэтому обычно вы видите код создания объекта похожим на такой:
Класс имя = new Класс(параметры)
Где Класс имя
— это создание новой переменной, а код справа от знака равенства — это создание нового объекта типа Класс
.
Примеры:
Код | Примечание |
---|---|
|
Создание объекта типа Object |
|
Создание объекта типа Cat |
|
Создание объекта типа Scanner |
Очень часто программисты называют переменные таким же именем, что и классы, только с маленькой буквы. Программиста-новичка такой код может сбивать с толку:
Код |
---|
|
|
|
По факту в этом коде нет ничего страшного — это самый обычный код, в котором создается переменная и тут же инициализируется объектом ее же типа.
Слева от знака равенства — создание переменной. Справа — создание объекта. Все.
2. Конструктор
Вы, наверное, часто видели, что при создании объекта в него передаются какие-то параметры. Причем в некоторые объекты параметры передаются, а в некоторые — нет. Как вообще работает весь этот механизм с параметрами?
Тут тоже все просто: у каждого класса есть специальный метод (или методы), которые отвечают за обработку параметров при создании объекта. Такие методы называются конструкторы. А один метод, соответственно, конструктор.
Отличить метод-конструктор от обычного метода в коде несложно. Такой метод обладает двумя особенностями:
- имя метода-конструктора совпадает с именем его класса (и начинается с большой буквы)
- метод-конструктор не имеет типа возвращаемого результата.
Общий вид его обычно такой:
модификаторы Класс(параметры)
{
код
}
Пример:
Код | Примечание |
---|---|
|
Класс Point Конструктор класса Point |
|
Создание объекта класса Point , будет вызван конструктор класса. |
Обратите внимание, как выглядит метод-конструктор: у него нет типа-результата и его имя совпадает с именем-класса.
И еще один момент: посмотрите на код внутри конструктора. Переменные-параметры конструктора имеют те же имена, что и поля класса – x, y. Это стандартная практика, чтобы не выдумывать названия переменных. Берутся те же имена, что у полей класса, а конфликт имен решается с помощью ключевого слова this.
3. Вызов конструктора
Когда вы создаете новый объект с помощью оператора new и команды вида «new Класс(параметры)», происходят две вещи:
- Java-машина создает объект типа Класс
- Java-машина вызывает у объекта конструктор и передает туда ваши параметры
Вы как программист сами решаете, какие у вашего класса должны быть конструкторы, и какие у этих конструкторов должны быть параметры.
Допустим, вы решили создать класс для учета котов в приюте для животных. Тогда ваш класс Cat
может иметь такой вид:
|
|
|
Так можно |
|
А так — нельзя. Код не скомпилируется. |
|
И так нельзя. Код не скомпилируется. |
У класса Cat
всего один конструктор с параметрами name и age. Т.к. других конструкторов нет, вы обязаны при создании объекта передать в качестве параметров имя (name
) и возраст (age
) кота. Вы не можете не передать параметры в конструктор.
4. Несколько конструкторов
Однако если вам нужно, вы можете добавить в класс несколько конструкторов. Никакого ограничения на количество конструкторов или их параметров нет. При создании объекта компилятор сам подберет подходящий по параметрам конструктор
Код | Примечание |
---|---|
|
|
|
Так можно: вызовется первый конструктор |
|
Так можно: вызовется второй конструктор |
|
А так — нельзя. Код не скомпилируется. |
Мы решили учесть ситуацию, что возраст кота может быть неизвестен. Для этого случая добавили в код специальную константу — UNKNOWN
и конструктор, который принимает только один параметр — имя кота.
Обратите внимание, что мы по-прежнему инициализируем обе переменные-класса внутри обоих конструкторов. Неизвестные/отсутствующие параметры мы заменяем на константу UNKNOWN
.
Если переменной age не присвоить никакого значения, она будет хранить значение по умолчанию == 0. А ведь найденному на улице котенку вполне себе может быть 0 полных лет. Поэтому ноль в переменой age совсем не обязательно обозначает «неизвестный возраст».
5. Конструктор по умолчанию
Если вы хотите, чтобы объекты вашего класса создавались без каких-либо параметров, вам нужно, чтобы у вашего класса был объявлен конструктор без параметров.
Конструктор без параметров — это не обязательно конструктор без кода, он вполне себе может содержать код, который инициализирует переменные класса стартовыми значениями:
Код | Примечание |
---|---|
|
|
|
Так можно: вызовется первый конструктор |
|
Так можно: вызовется второй конструктор |
Конструктор по умолчанию
Есть очень важный момент, который вам следует знать и помнить.
Если у вашего класса вообще нет ни одного конструктора, компилятор добавит вам в класс конструктор-по-умолчанию – конструктор без параметров и кода, но с модификатором public.
Однако, если в вашем классе есть хотя бы один конструктор, конструктор-по-умолчанию уже добавляться не будет – вам нужно будет дописать его самостоятельно.
Код | Примечание |
---|---|
|
|
|
Так можно: вызовется конструктор-по-умолчанию |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ