Оценить:
 Рейтинг: 3.5

Java за неделю. Вводный курс

Год написания книги
2018
<< 1 ... 16 17 18 19 20 21 22 23 24 25 >>
На страницу:
20 из 25
Настройки чтения
Размер шрифта
Высота строк
Поля

// Метод без аргументов

void set () {

// Присваиваем значение 5 полю digit

// и значение А полю letter

set (5, «A»);

}

// Метод для отображения значений полей

void show () {

System.out.println («Поле digit: "+digit);

System.out.println («Поле letter: "+letter);

}

}

public class Listing6_4 {

public static void main (String [] args) {

// Объявляем первый объект класса MyClass

MyClass objFirst=new MyClass ();

// Объявляем второй объект класса MyClass

MyClass objSecond=new MyClass ();

// Присваиваем числовое значение полю

// первого объекта

objFirst.set (10);

// Присваиваем символьное значение полю

// первого объекта

objFirst.set («F»);

// Присваиваем значения по умолчанию полям

// второго объекта

objSecond.set ();

// Выводим на печать значения полей первого объекта

System.out.println («Свойства первого объекта»);

objFirst.show ();

// Выводим на печать значения полей второго объекта

System.out.println (»\nСвойства второго объекта»);

objSecond.show ();

}

}

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

Обратите внимание, как реализована обработка вызова сеттера без аргументов. Мы захотели, чтобы в этом случае полям были присвоены значения по умолчанию: целочисленное 5 и символьное «A». Поэтому внутри сеттера без аргументов вызывается сеттер с двумя аргументами. В свою очередь, внутри сеттера для двух аргументов поочередно вызываются сеттеры для целочисленного аргумента и символьного аргумента. Со стороны это выглядит так, словно метод несколько раз вызывает сам себя. Но вы уже знаете, что на самом деле это разные методы с одинаковым именем. Допустимость таких конструкций – достоинство языка Java, позволяющее писать мощный и легко читаемый код. В нашем примере вложенная структура вызовов выглядит излишней, потому что мы используем очень простые методы – казалось бы, проще присвоить значения полям непосредственно в вызванном сеттере. Но в реальном программировании, когда каждый метод состоит из сотен строк кода, намного выгоднее вызвать уже описанный и отлаженный метод внутри другого метода, чем дублировать описание.

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

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

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

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

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

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

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

MyClass obj=new MyClass ();

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

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

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

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

Листинг 6.5 Пример использования конструкторов
<< 1 ... 16 17 18 19 20 21 22 23 24 25 >>
На страницу:
20 из 25