Конструктор Java

Проще говоря, Конструктор-это метод, подобный блоку кода, который вызывается Javaruntime во время создания объекта с помощью оператора new (). Конструкторы являются особенными в том смысле, что они имеют то же имя, что и класс, частью которого они являются. Они также являются особенными потому, что они вызываются JVM автоматически при создании объекта.

Вы когда-нибудь задумывались о том, зачем вам нужен конструктор? Какие преимущества это дает? Одна из причин заключается в том, чтобы инициализировать ваш объект с помощью default или initialstate, поскольку значения по умолчанию могут быть не тем, что вы ищете.

Еще одна причина, по которой вы создаете конструктор, — это информировать мир о зависимостях, класс должен выполнять свою работу. Любой человек, посмотрев на ваши конструкторы, должен быть в состоянии понять, что ему нужно для того, чтобы использовать этот класс. Например, следующий класс OrderProcessor нуждается в очереди и базе данных для правильной работы.

classOrderProcessor{
Database to;
Queue from;

publicOrderProcessor(Queue source, Database target){
this.from = source;
this.to = target;
}

public void process(Message msg) {
// чтение из очереди
// поставить к базе данных
}

}

Когда вы создаете объект класса OrderProcessor, например newOrderProcessor(myQueue, MyDatabase), JVM вызовет этот конструктор. Если вы не добавляете какой-либо конструктор Java по умолчанию, добавьте конструктор аргументов по умолчанию в свой класс.

Легко создать MockQueue и MockDatabase для тестирования нашего класса OrderProcessor, подумайте, что произойдет, если этот класс вызовет одноэлементный или служебный метод, чтобы получить его зависимость.

Было бы трудно проверить этот класс, поскольку создание объектов является фундаментальной концепцией, каждый разработчик Java должен знать, как работает конструктор, как он инициализирует объект, как вызывается конструктор суперкласса и так далее. В следующем разделе мы увидим, как это происходит.

Как работает конструктор в Java

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

publicOrderProcessor(Queue source, Database target){
this.from = source;
this.to = target;
}

publicOrderProcessor(){
this(defaultQueue, defaultDatabase);
}

Здесь ни один конструктор аргументов не вызывает другой конструктор, который принимает очередь и базу данных. Это называется цепочкой конструкторов, и вы используете this() и super() для вызова из одного класса и родительского класса соответственно.

Вы можете использовать модификатор public, private, protectedaccess с конструктором или даже оставить их без какого-либо параметра, в этом случае он будет использовать доступ по умолчанию, который находится на уровне package-private.

Некоторые факты о конструкторе в Java

Есть много фактов о конструкторе, которые вы, как разработчик Java, должны знать, это поможет вам прочитать и понять существующий код Java в вашей организации или из любой библиотеки с открытым исходным кодом.

Вызов конструкции должен быть в строке кулака

Если вы вызвали другой конструктор из того же класса или родительского класса, то это должна быть первая строка вызова конструктора. Как уже говорилось ранее, по умолчанию каждый конструктор вызывает super(), без аргумента конструктора родительского класса.

Конструктор не может быть окончательным, абстрактным или синхронизированным.

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

Конструктор ничего не возвращает

Вы не можете использовать любой тип возвращаемого значения, включая void, с конструктором, это приведет к ошибке времени компиляции. Это одно из главных отличий, которое отличает обычный метод от конструктора в Java.

Заключение

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

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

Если вы используете контейнеры IOC с открытым исходным кодом, такие как GoogleGuice или Springframework, то это будет очень простой в использовании и тестировании класс с соответствующим конструктором.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *