Skip to content
Aleksandr Kuchuk edited this page Jun 11, 2016 · 1 revision

Пара слов о static.

В java у нас есть класс, а есть объект.

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

Ну и понятно, что поля и методы объекта существуют тогда, когда создан объект. Что довольно логично.

Но что если мы хотим, чтобы некоторое поле или метод принадлежали именно классу, а не объекту? Тут нам и поможет static.

А раз поле(или метод) принадлежит классу, то и обращаться к нему надо через имя класса!

class Example {
public static int field = 14;
}

//some code
Example.field;

Да, мы можем обратиться и через экземпляр класса к этому полю - но это плохой подход, да и jvm сам подставит там класс, а не экземпляр.

При этом будет все нормально даже в такой конструкции(потому что field - это поле класса!):

class Example {
public static int field = 14;
}

//some code
Example ex = null.
ex.field;

Мы не получим NPE. Но еще раз - к статике обращаемся через имя класса! Понятно, что это статическое поле класса будет общим для всех объектов класса, будет как бы 'расшаренным' на всех.

Опять же НЕ переопределяйте статические методы и т.д! Это ОЧЕНЬ плохо!

В основном static используется для констант и методов-утилит, например, Math.pow.

Clone this wiki locally