Java предоставляет 4 типа модификаторов без контроля доступа, для повышения функциональности:

  • static – используются при создании методов и переменных класса .
  • final – используется для классов, методов и переменных. Сообщает о том что реализация является законченной и не подлежит изменениям.
  • abstract – применяется для создания абстрактных методов и классов.
  • synchronized и volatile – используются в многопоточных приложениях.
  • transient – используется для сброса значения переменной, при сериализации.

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

Статические переменные

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

Статические переменные так же известны как переменные класса. Локальная переменная не может быть объявлена как статическая.

Статические методы

Метод объявленный как статический(с модификатором static), может быть вызван без создания экземпляра класса.

Синтаксис вызова статического метода:

Пример:

Результат выполнения:

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

Переменные Final

Переменные с модификатором final могут быть явно инициализированы только один раз. Переменные ссылочного типа указанные как final, не могут быть переназначены на другие объекты.

Переменные указанные как final, чaсто используются вместе с модификатором static.

Пример:

Методы Final

Методы объявленные как final в суперклассе нельзя переопределить в подклассе.  Как упоминалось ранее модификатор final предотвращает изменение унаследованных методов в подклассе.

Пример:

Классы Final

Если класс помечен как final, то ни один класс не может наследоваться от него.

Пример:

Модификатор – Abstract

Абстрактный класс

Абстрактный класс не может быть инстанцирован(создан экземпляр). Если класс объявлен с модификатором abstract, то он может служить только для расширения других классов.

Класс одновременно не может быть объявлен как abstract и final(класс с final не может быть унаследован). Если класс содержит абстрактный метод, то он так же должен быть объявлен абстрактным, иначе произойдёт ошибка при компиляции.

Пример:

Абстрактные методы

Методы с модификатором abstract могут быть объявлены без реализации(тело метода). Метод должен быть реализован в подклассе. Абстрактный метод не может быть объявлен как final или static.

Класс который наследуется от абстрактного класса, должен реализовать все методы суперкласса которые имеют модификатор abstract. Или класс так же должен быть объявлен абстрактным.

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

Синтаксис:

Пример:

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

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

Модификатор synchronized может совместно использоваться с любым из 4 модификаторов доступа.

Пример:

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

Переменная экземпляра отмеченная ключевым словом transient необходима что бы указать JVM не сохранять её значение при сериализации.

Пример:

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

В целях повышения эффективности работы, спецификации языка Java позволяет JRE сохранять локальную копию переменной в каждом потоке, который ссылается на нее. Можно считать эти «внутрипоточные» копии переменных похожими на кэш, помогающий избежать проверки главной памяти каждый раз, когда требуется доступ к значению переменной.

Но если в случае когда: запустятся два потока, и первый прочитает переменную А как 5, тогда как второй – как 10. Если переменная А изменились от 5 до 10, то первый поток не будет знать об изменении, так что будет иметь неправильное значение А. Однако если переменная А будет помечена как volatile, то то в любое время, когда поток обращается к её значению, он будет получать копию А и считывать её текущее значение.

Пример:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

семнадцать − 2 =