Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

С целью уменьшения возможности потенциальных ошибок рекомендуется ограничивать доступ к полям классов, определяя их как private. Чтобы другие классы могли считывать/устанавливать значения private-полей, в классе необходимо определить методы доступа. Такие методы могут, в частности, проверять значение, которое другой класс пытается присвоить переменной.

В соответствии с соглашениями об именах компании Sun имена методов доступа обычно начинаются с get или set.

Методы

Объект класса имеет данные (переменные) и поведение (методы), определяемые его классом. Поведение — это множество операций, которые объект может выполнять над данными.

Метод — это именованный фрагмент исполнимого кода класса, вызов которого возможен как внутри класса, так и для объектов класса.

Связанное хранение в классе, как полей данных, так и методов для работы с ними называется

инкапсуляцией.

Определение метода содержит объявление метода и тело метода.

Объявление метода в общем виде может быть представлено так:

*спецификатор доступа+ *модификатор+ тип_возвращаемого_значения имя_метода (*список параметров+) [throws список исключений, бросаемых из метода+

Комбинация имени-идентификатора метода и списка типов параметров (возможно, пустого)

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

1.Спецификаторы доступа (public, protected, private)

Применяют для ограничения доступа к методу (см. п. «Управление доступом к членам класса»).

2.Модификаторы методов

abstract — модификатор реализации

Абстрактные методы объявляются, но не реализуются в данном классе, то есть не имеют тела (оно заменяется символом точки с запятой).

Абстрактный метод может быть объявлен только в абстрактном классе.

Модификатор abstract не может быть использован вместе с private.

Данный модификатор не может быть использован вместе с модификаторами, представленными ниже.

static — модификатор принадлежности

Статический метод служит атрибутом класса в целом, а не частных экземпляров этого класса. Метод, обозначенный как static, принято называть методом класса, а нестатический метод - методом экземпляра класса.

Особенности static- методов:

метод вызывается непосредственно из класса, создавать экземпляр класса для работы со статическим методом не требуется;

метод может ссылаться только на статические поля и методы класса;

статический метод не может быть переопределен, так как неявно является final- методом.

final — модификатор переопределения

Конечный (final) метод не может быть переопределен в производных классах. По умолчанию

private-методы являются final-методами.

Применение модификатора final в объявлениях классов и методов способствует повышению безопасности кода. Можно доверять внутренней реализации final-метода всегда, не опасаясь «подделки». Для final-класса все методы по умолчанию являются конечными.

synchronized

Synchronized-методы используются для организации корректной работы многопоточных

приложений.

native

14

Скачано с сайта http://ivc.clan.su

Метод native — это метод, только объявленный в Java-классе, а реализованный как внешняя библиотека в машинно-зависимом коде. Использованию native-методов в апплетах препятствует менеджер безопасности.

strictfp

— обеспечивает единообразное выполнение операций с плавающей точкой во всех JVM.

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

3.Тип возвращаемого значения

Если метод должен возвращать какое-либо значение, то в объявлении метода требуется указать тип возвращаемого значения, а тело метода должно содержать оператор return возвращаемое_значение.

В противном случае метод должен быть объявлен с ключевым словом void. В таком методе может присутствовать оператор return.

4.Список исключений, бросаемых из метода

При выполнении методов Java могут создаваться исключения (объекты типа Exception), связанные

с возникновением ошибок.

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

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

Пример метода класса Integer, выбрасывающего исключение типа RuntimeException: public static int parseInt(String s) throws NumberFormatException

Конструкторы - это специальные методы, используемые для инициализации создаваемых объектов (экземпляров классов).

Особенности конструкторов

Используются для инициализации полей класса.

Имя конструктора должно совпадать с именем класса, содержащим объявление конструктора.

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

Конструктор вызывается при создании экземпляра класса с помощью оператора new.

Конструктор вызывается после присваивания полям вновь созданного объекта значений по умолчанию и выполнения явных инструкций инициализации полей (блоков инициализации).

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

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

Такой конструктор без параметров (конструктор по умолчанию) используется при создании объекта и вызывает конструктор непосредственного суперкласса. Если суперкласс не обладает конструктором без параметров, то возникает ошибка компиляции.

Если в классе имеется какой-либо конструктор с параметрами, но нет конструктора без параметров, то компилятор не будет автоматически синтезировать для класса конструктор без параметров!

Модификаторами конструктора могут быть только спецификаторы доступа. Обычно используется public, чтобы уровень доступа к конструктору не был ниже уровня доступа к самому классу.

В теле конструктора в качестве начальных операторов могут использоваться операторы вызова других конструкторов (см. ниже в п. «Использование ключевых слов this и super в конструкторах»).

Перегрузка и переопределение методов

Перегрузка (overloading)

Методы класса должны различаться своими сигнатурами. Класс может содержать несколько

одноименных методов с различными списками типов параметров, то есть с различными сигнатурами.

Такие методы называются перегруженными.

15

Скачано с сайта http://ivc.clan.su

Особенности Каждый перегруженный метод имеет уникальный список типов параметров.

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

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

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

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

Примеры перегрузки:

перегруженные конструкторы класса java.lang.String public String ()

public String (String value) public String (char[] value) public String (StringBuffer buffer)

перегруженные методы класса java.lang.String public int indexOf (int ch, int fromIndex) public int indexOf (String str)

public int indexOf (String str, int fromIndex)

Переопределение (overriding) —

это замена реализации метода суперкласса в производном классе. Особенности

Сигнатура переопределенного метода полностью совпадает с сигнатурой метода

суперкласса. Если список типов параметров нового одноименного метода отличается, то этот метод перегрузит метод суперкласса, а не переопределит его.

Тип возвращаемого значения нового, переопределенного, метода должен соответствовать (то есть совпадать или преобразовываться присваиванием) типу возвращаемого значения исходного родительского метода.

При переопределении метода действует правило расширения доступа: переопределенный метод нельзя объявлять более защищенным, чем исходный.

Метод со спецификатором доступа private не является доступным для классов-потомков и, следовательно, не может быть переопределен.

Переопределенный метод может быть помечен как final, подвергающийся переопределению, - нет.

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

Можно свободно использовать при переопределении метода модификаторы, связанные с особенностями внутренней реализации метода: synchronized, native и strictfp.

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

Если класс-потомок содержит переопределенный метод, то метод суперкласса следует вызывать, используя ключевое слово super.

Ключевые слова THIS и SUPER

this — можно использовать в любом нестатическом методе (методе экземпляра класса) для ссылки на текущий объект (которому этот метод «принадлежит»,) в следующих случаях.

Если текущий объект надо передать вызванному методу в качестве параметра (объект обращается к некоторому методу и передает ссылку на себя в качестве параметра).

Пример:

public class Greet Applet extends Applet

{

16

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]