Не могу понять смысл слова static

194
16 апреля 2018, 01:18

Ребят, помогите мне понять, зачем перед функцией писать слово static?

Answer 1

Не статические, обычные, методы можно вызвать у экземпляра класса в котором они объявлены. Они имеют доступ к внутреннему состоянию конкретного экземпляра класса (его полям).

Статические методы не привязаны к какому-то экземпляру класса и могут быть вызваны без создания оного. Они не имеют доступа к нестатическим членам класса.

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

Answer 2

Если перед функцией добавить модификатор static, метод будет принадлежать классу и для его вызова не надо создавать новый объект. Пример:

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.pow(2, 2)); //4.0
    }
}

Метод pow() из java.lang.Math объявлен, как static. Поэтому мы его вызывали через класс, которому он пренадлежит:

public final class Math {
    @HotSpotIntrinsicCandidate
    public static double pow(double a, double b) {
        return StrictMath.pow(a, b); // default impl. delegates to StrictMath
    }
}

Надо также заметить, что статические методы могут вызывать только другие статические методы, имеют доступ только к статическим переменным, не могут использовать this или super.

Answer 3

Функция может принадлежать самому классу (это как раз статическая функция, для её создания используется слово static), а может - объекту этого класса. Статическая функция вызывается от имени класса и не зависит ни от одного из объектов класса. Вообще это не особенность языка java, статические функции есть в большинстве языков программирования, поддерживающих ООП. В интернете полно статей и примеров на тему, что такое статические функции и зачем они могут применяться. Формат stackoverflow не лучший для настолько общих вопросов)

Answer 4

Объясню на простом понятном «пацанском» языке. Смотри у тебя есть класс в нем есть, допустим статическое поле с геттером и сеттером. Из какого то другого класса ты обращаешься к этому классу, не создавая экземпляр класса. Через сеттер записал данные. Теперь ещё из другого класса опять обращаешься к статическому классу и считываешь этот элемент . Как то так. С помощью статик формируется такой паттерн проектирования как синглтон.

public class A {
  public static int field;
}
public class Main{
 ...
 public static void main(){
  A.field = 5;
  C c = new C();//вывод 5
 }
}
public class C{
 ...
 public C(){
  System.out.println(A.field);
 }
}
READ ALSO
Проблема в шейдере при отрисовки

Проблема в шейдере при отрисовки

Продолжение к моей прошлой работеЯ продвинулся дальше

205
Как преобразовать объект к обобщению?

Как преобразовать объект к обобщению?

Не знаю правильно ли поставлен вопрос, но по коду будет видно в чём его сутьЕсть класс, использующий обобщение

169
Java 10, IntellIJ не могу установить 10 programming language level

Java 10, IntellIJ не могу установить 10 programming language level

Привет! Появилась у меня проблема с jdk 10 (183)

196