Бесплатный курс по Java: от основ до продвинутого уровня
Статические поля в Java
Допустим у нас есть класс и мы хотим чтобы какие-то поля или методы этого класса принадлежали одновременно всем объектам этого класса.
Такие поля и методы можно создать и они называются статическими.
Объявляются с помощью ключевого слова static.
Поясним на примере:
import java.io.*;
public class StaticVarAndMethod {
//статическая переменная
static int staticVar;
//обычная переменная
int NotStatic;
public static void main(String args[]) {
//создадим пару объектов класса StaticVarAndMethod
StaticVarAndMethod staticVAndM = new StaticVarAndMethod();
StaticVarAndMethod staticVAndM1 = new StaticVarAndMethod();
//Переменная staticVar общая
//для всех объектов StaticVarAndMethod,
//поэтому изменение этой переменной
//в одном объекте приведет к её изменению в другом.
staticVAndM.staticVar = 100;
staticVAndM1.staticVar = 85;
//В объекте staticVAndM поле staticVar содержит 85,
//поэтому нижняя строчка выведет 85.
System.out.println(staticVAndM.staticVar);
//В объекте staticVAndM1 поле staticVar тоже содержит 85,
//поэтому нижняя строчка выведет 85.
System.out.println(staticVAndM1.staticVar);
//То есть последнее изменение staticVar повлияло
//на staticVar в обоих объектах, так как staticVar
//это одно и тоже поле, но оно доступно обоим объектам.
//Переменная NotStatic не является общей
//для всех объектов StaticVarAndMethod,
//поэтому изменение этой переменной
//в одном объекте не приведет к её изменению в другом.
staticVAndM.NotStatic = 100;
staticVAndM1.NotStatic = 87;
//В объекте staticVAndM поле NotStatic содержит 100,
//поэтому нижняя строчка выведет 100.
System.out.println(staticVAndM.NotStatic);
//В объекте staticVAndM1 поле NotStatic уже содержит 87,
//поэтому нижняя строчка выведет 87.
System.out.println(staticVAndM1.NotStatic);
//Это не статическое поле, поэтому
//у каждого объекта свое личное поле NotStatic.
}
}
Вывод:
Также бывают статические методы.
Статическими методами понятное дело выполняются какие-то действия, которые затронут все объекты класса и поэтому логично что статический метод может обращаться только к статическим полям класса.
Статический метод не зависит от объекта, а значит его можно вызвать без создания объекта класса в котором этот метод находиться.
Поясним на примере:
public class StaticVarAndMethod {
// Статическая переменная
static int staticVar;
int NotStatic;
// Статический метод
public static void deposit(int amount) throws ArrayIndexOutOfBoundsException {
// Обращаемся к статическому полю staticVar
staticVar += amount;
}
public static void main(String args[]) {
StaticVarAndMethod staticVAndM = new StaticVarAndMethod();
StaticVarAndMethod staticVAndM1 = new StaticVarAndMethod();
// Как видим ниже, вызываем deposit через класс,
// а не через какой-либо объект.
StaticVarAndMethod.deposit(3); // Добавим 3 к staticVar
System.out.println(staticVAndM.staticVar);
System.out.println(staticVAndM1.staticVar);
// В обоих объектах staticVar теперь 3
}
}
Разбираем внутренние классы в Java: зачем они нужны, как связаны с внешним классом, доступ к приватным полям и пример
Time to read: 12
Статический класс
Узнайте, что такое статический класс в Java: его отличия от обычного внутреннего класса, доступ только к статическим полям и примеры использования в OOP.