Модификаторы static и final в языке Java

Модификаторы static и final в языке JavaМодификаторы final и static очень важны в ООП. Ведь с помощью модификатора final вы сможете создать константу, а с помощью модификатора static можно обращаться к членам класса без создания экземпляра класса.
Рассмотрим для примера класс MyMath, который будет содержать арифметические функции:

Функция Add у нас статичная, а функция Multiply нет:

С другой стороны при создании объекта класса MyMath вы сможете пользоваться обеими функциями:

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

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

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

Любое поле в Java можно сделать константой с помощью ключевого слова final:

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