Конструкторы класса
Вы уже обратили внимание на то, что в операции new, определяющей экземпляры класса, повторяется имя класса со скобками. Это похоже на обращение к методу, но что за "метод", имя которого полностью совпадает с именем класса?
Такой "метод" называется
конструктором класса
(class constructor). Его своет образие заключается не только в имени. Перечислим особенности конструктора.
Конструктор имеется в любом классе. Даже если вы его не написали, компилятор Java сам создаст
конструктор по умолчанию
(default constructor), который, впрочем, пуст, он не делает ничего, кроме вызова конструктора суперкласса.
Конструктор выполняется автоматически при создании экземпляра класса, после распределения памяти и обнуления полей, но до начала использования создаваемого объекта.
Конструктор не возвращает никакого значения. Поэтому в его описании не пишется даже слово
void
, но можно задать один из трех модификаторов
public
,
protected
или
private
.
Конструктор не является методом, он даже не считается членом класса. Поэтому его нельзя наследовать или переопределить в подклассе.
Тело конструктора может начинаться:
с вызова одного из конструкторов суперкласса, для этого записывается слово
super()
с параметрами в скобках, если они нужны;
с вызова другого конструктора того же класса, для этого записывается слово
this()
с параметрами в скобках, если они нужны.
Если же
super()
в начале конструктора не указан, то вначале выполняется конструктор суперкласса без аргументов, затем происходит инициализация полей значениями, указанными при их объявлении, а уж потом то, что записано в конструкторе.
Во всем остальном конструктор можно считать обычным методом, в нем разрешается записывать любые операторы, даже оператор
return
, но только пустой, без всякого возвращаемого значения.
В классе может быть несколько конструкторов. Поскольку у них одно и то же имя, совпадающее с именем класса, то они должны отличаться типом и/или количеством параметров.
В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса
object
.