В главном классе программы мы создаем два объекта класса MyClass. Полям первого объекта мы присваиваем значения в явном виде. Полям второго объекта присваиваем значения по умолчанию. Затем мы выводим значения полей на печать.

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


6.2.3 Конструктор класса

В листинге 6.4 мы использовали специальный метод (сеттер) для присвоения значений полям объекта. Но для присвоения начальных значений в момент создания объекта существует более простой и удобный механизм – конструктор. Это метод, автоматически вызываемый при создании объекта класса. В конструкторе определены действия, которые необходимо выполнить при создании объекта. Если конструктор не задан в явном виде, то при создании объекта используется так называемый конструктор по умолчанию. Когда в рассмотренных ранее примерах мы создавали объекты, то в этот момент использовался конструктор по умолчанию, который не выполнял никаких действий кроме выделения памяти под объект.

Если в описании конструктора применяются аргументы, то при создании объекта их необходимо передать конструктору, например:

MyClass obj=new MyClass (10, «A»);

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

MyClass obj=new MyClass ();

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

В классе может быть описано несколько конструкторов, которые можно перегружать аналогично обычным методам. Какой из конструкторов вызвать, определяется автоматически по количеству и типу аргументов. Чтобы сохранить возможность вызова конструктора объекта без аргументов, в классе нужно отдельно описать конструктор без аргументов. Конструктор может быть «пустым», то есть не выполнять никаких действий.

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

В листинге 6.5 приведен пример программы, в которой используются конструкторы объектов с перегрузкой.


Листинг 6.5 Пример использования конструкторов

class MyClass {

// Объявляем поля класса

int digit;

char letter;

// Конструктор класса без аргументов

MyClass () {

digit=9;

letter=«Z»;

System.out.println («Вызван конструктор объекта без аргументов.»);

System.out.println («Полям присвоены значения "+digit+" и "+letter);

}

// Конструктор класса с двумя аргументами

MyClass (int a, char b) {

digit=a;

letter=b;

System.out.println («Вызван конструктор объекта с двумя аргументами.»);

System.out.println («Полям присвоены значения "+digit+" и "+letter);

}

}


public class Listing6_5 {


public static void main (String [] args) {

// Создаем первый объект класса MyClass

// Вызывается конструктор без аргументов

MyClass objFirst=new MyClass ();


// Создаем второй объект класса MyClass

// Вызывается конструктор с двумя аргументами

MyClass objSecond=new MyClass (8, «B»);

}

}

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