Страницы

Поиск по вопросам

понедельник, 2 декабря 2019 г.

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

#java #static


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


Ответы

Ответ 1



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

Ответ 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.

Ответ 3



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

Ответ 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); } }

Комментариев нет:

Отправить комментарий