Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_k_ekzamenu_po_programmirovaniyu_1_semest....docx
Скачиваний:
24
Добавлен:
04.12.2018
Размер:
94.85 Кб
Скачать

47. Особенности конструктора как метода класса

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

Platypus p1 = new Platypus();

Назначение методов гораздо более общее. Основная функция метода — выполнить Java код.

Отличия описания

Конструкторы и методы имеют три отличия при описании: модификаторы доступа, возвращаемые типы и правила именования. Как и методы, конструкторы могут иметь любые модификаторы доступа: public, protected, private, или модификатор может отсутствовать (часто имеется ввиду package или friendly). Но в отличии от методов, конструкторы могут иметь модификаторы только доступа. Поэтому, конструктор не может быть abstract, final, native, static, orsynchronized.

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

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

48. Понятие статических элементов класса. Объявление статических элементов.

При создании объектов, с одной стороны, каждый объект имеет свои собственные независимые поля данных, с другой – все объекты одного класса используют одни и те же методы. Методы класса создаются и размещаются в па-мяти компьютера всего один раз – при создании класса, так как нет никакого смысла держать в памяти копии методов для каждого объекта, поскольку у всех объектов методы одинаковые. А поскольку наборы значений полей у каждого объекта свои, поля объектов не должны быть общими. Однако существует ряд ситуаций, когда необходимо, чтобы все представители одного класса включали в себя какое-либо одинаковое значение. Для этих целей служат статические элементы класса. Статический элемент класса может рассматриваться как глобальная переменная или функция, доступная только в пределах области класса. Для определения статических полей и методов используется ключевое слово staticСтатический элемент данных разделяется всеми представителями данного класса. То есть существует только один экземпляр переменной независимо от числа созданных представителей. Память под статический элемент выделяется, даже если не существует никаких представителей класса.  Определение статических полей класса происходит не так, как для обычных полей. Обычные поля объявляются (компилятору сообщается имя и тип поля) и определяются (компилятор выделяет память для хранения поля) при помощи одного оператора. Для статических полей эти два действия выполняются двумя разными операторами: объявление поля находится внутри определения класса, а определение, как правило, располагается вне класса и зачастую представляет собой определение глобальной переменной. Если бы определение статического поля класса находилось внутри класса (как в ранних версиях C++), то это нарушило бы принцип, в соответствии с которым определение класса не должно быть связано с выделением памяти. Поместив определение статического поля вне класса, мы обеспечили однократное выделение памяти под это поле, до того как программа будет запущена на выполнение, и статиче-ское поле в этом случае будет доступным всему классу.

static int iCount;