-
Notifications
You must be signed in to change notification settings - Fork 3
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
.