Ребят, помогите мне понять, зачем перед функцией писать слово static?
Не статические, обычные, методы можно вызвать у экземпляра класса в котором они объявлены. Они имеют доступ к внутреннему состоянию конкретного экземпляра класса (его полям).
Статические методы не привязаны к какому-то экземпляру класса и могут быть вызваны без создания оного. Они не имеют доступа к нестатическим членам класса.
Таким образом, если вам в методе не нужно обращаться к состоянию конкретного экземпляра класса, то метод можно сделать статическим.
Если перед функцией добавить модификатор 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
.
Функция может принадлежать самому классу (это как раз статическая функция, для её создания используется слово static), а может - объекту этого класса. Статическая функция вызывается от имени класса и не зависит ни от одного из объектов класса. Вообще это не особенность языка java, статические функции есть в большинстве языков программирования, поддерживающих ООП. В интернете полно статей и примеров на тему, что такое статические функции и зачем они могут применяться. Формат stackoverflow не лучший для настолько общих вопросов)
Объясню на простом понятном «пацанском» языке. Смотри у тебя есть класс в нем есть, допустим статическое поле с геттером и сеттером. Из какого то другого класса ты обращаешься к этому классу, не создавая экземпляр класса. Через сеттер записал данные. Теперь ещё из другого класса опять обращаешься к статическому классу и считываешь этот элемент . Как то так. С помощью статик формируется такой паттерн проектирования как синглтон.
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);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Не знаю правильно ли поставлен вопрос, но по коду будет видно в чём его сутьЕсть класс, использующий обобщение
Привет! Появилась у меня проблема с jdk 10 (183)