воскресенье, 20 ноября 2011 г.

Модификаторы

В Java интерфейсы, классы и их члены могут быть объявлены с одним или несколькими модификаторами. Их можно разделить по категориям:
модификаторы класса:
public private(для внутренних классов) protected(для внутренних классов) abstract static final strictfp
модификаторы полей:
public protected private static final transient volatile
модификаторы методов:
public protected private abstract static final synchronized native strictfp
модификаторы конструкторов:
public protected private

Давайте рассмотрим назначения каждого из этих модификаторов.

Модификаторы доступа: public protected private - устанавливают область видимости элемента.
public -  элемент доступен из любого класса.
protected - элемент доступен для классов-наследников и классов в пределах пакета.
private - элемент доступен только внутри класса.
В случае отсутствия этих модификаторов используется доступ по умолчанию(default, package private) - элемент доступен только в пределах пакета.

Некоторые модификаторы имеют специфические значения в зависимости от того, к какому элементу они применяются.

final 
класс: нельзя наследовать;  
поле: после инициализации не может изменяться(в случае объектов не может изменяться ссылка на объект, а состояние самого объекта - может);  
метод: нельзя переопределять.
static
вложенный класс: не имеет доступа к нестатическим элементам внешнего класса;
поле: существует на уровне класса, а не объекта;
метод: существует на уровне класса и не может вызывать нестатические методы.
strictfp
метод: вычисления с плавающей точкой будут соответствовать стандарту IEEE 754;
класс: все методы работают по стандарту IEEE 754.
abstract
класс: нельзя создавать объекты абстрактного класса(наличие модификатора обязательно, если есть хотя бы 1 абстрактный метод);
метод: состоит лишь из объявления(без тела).
transient
поле: не сериализуется.
volatile
поле: говорит виртуальной машине, что поле может использоваться в других потоках и кэшировать его не надо.
native
метод: метод реализован на другом языке.
synchronized
метод: метод синхронизирован(если задача выполняется внутри одного из объявленных как synchronized методов, все остальные потоки не смогут зайти ни в какой synchronized метод.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.