Принадлежит классу, но не его экземплярам.
Статические методы и переменные доступны вне своего класса. А это значит, что они могут быть "не защищены", и предоставлять нежелательный доступ к данным в программе.
static-блок инициализации
Статический блок инициализации выполняется один раз при первом обращении к классу (или при загрузке класса). Инициализация статических полей выполняется сверху вниз, учитывая присваивания в объявлении полей и в статических блоках инициализации.
static-метод
Метод вызывается без создания объекта класса.
В статических методах нельзя вызывать нестатические методы и использовать нестатические переменные, т.к., статический метод является принадлежностью класса (который один), а нестатические методы и поля принадлежат объектам этого класса (которых может быть много).
Статические методы не имеют доступа к переменной this.
Статические методы могут быть перегружены нестатическими методами при наследовании.
Статические методы не могут быть перекрыты и abstract.
static-переменная
Статическая переменная объявляется для класса, а не для объекта.
Статическую переменную можно вызывать без создания объекта.
Статические переменные общие для всех экземпляров класса.
Все константы являются статическими.
final
класс - нельзя наследовать
метод - нельзя перекрыть
поле - константа
локальная переменная - константа
1 Константы должны быть определены одним из следующих образов:
при объявлении
в конструкторе
в блоке инициализации
Если константа статическая, то пишут в верхнем регистре через подчеркивание:
static final int SOME_CONST = 2;
abstract
Определяют частичную функциональность класса, оставив часть методов не реализованными.
При наследовании абстрактного класса, класс потомок наполняет функциональностью нереализованные методы.
Класс объявленный со спецификатором abstract может содержать:
как абстрактные методы (методы без реализации), так и не абстрактные
конструкторы
final-переменные
локальная переменная - константа
! Нельзя создать экземпляр, но можно объявить переменную данного типа.