Статические поля
Last updated: 4 мая 2025 г.Допустим у нас есть класс и мы хотим чтобы какие-то поля или методы этого класса принадлежали одновременно всем объектам этого класса.
Такие поля и методы можно создать и они называются статическими.
Объявляются с помощью ключевого слова static
.
Поясним на примере:
1import java.io.*;
2
3public class StaticVarAndMethod {
4 //статическая переменная
5 static int staticVar;
6 //обычная переменная
7 int NotStatic;
8
9 public static void main(String args[]) {
10 //создадим пару объектов класса StaticVarAndMethod
11 StaticVarAndMethod staticVAndM = new StaticVarAndMethod();
12 StaticVarAndMethod staticVAndM1 = new StaticVarAndMethod();
13
14 //Переменная staticVar общая
15 //для всех объектов StaticVarAndMethod,
16 //поэтому изменение этой переменной
17 //в одном объекте приведет к её изменению в другом.
18 staticVAndM.staticVar = 100;
19 staticVAndM1.staticVar = 85;
20 //В объекте staticVAndM поле staticVar содержит 85,
21 //поэтому нижняя строчка выведет 85.
22 System.out.println(staticVAndM.staticVar);
23 //В объекте staticVAndM1 поле staticVar тоже содержит 85,
24 //поэтому нижняя строчка выведет 85.
25 System.out.println(staticVAndM1.staticVar);
26 //То есть последнее изменение staticVar повлияло
27 //на staticVar в обоих объектах, так как staticVar
28 //это одно и тоже поле, но оно доступно обоим объектам.
29
30 //Переменная NotStatic не является общей
31 //для всех объектов StaticVarAndMethod,
32 //поэтому изменение этой переменной
33 //в одном объекте не приведет к её изменению в другом.
34 staticVAndM.NotStatic = 100;
35 staticVAndM1.NotStatic = 87;
36 //В объекте staticVAndM поле NotStatic содержит 100,
37 //поэтому нижняя строчка выведет 100.
38 System.out.println(staticVAndM.NotStatic);
39 //В объекте staticVAndM1 поле NotStatic уже содержит 87,
40 //поэтому нижняя строчка выведет 87.
41 System.out.println(staticVAndM1.NotStatic);
42 //Это не статическое поле, поэтому
43 //у каждого объекта свое личное поле NotStatic.
44 }
45}
Вывод:

Также бывают статические методы.
Статическими методами понятное дело выполняются какие-то действия, которые затронут все объекты класса и поэтому логично что статический метод может обращаться только к статическим полям класса.
Статический метод не зависит от объекта, а значит его можно вызвать без создания объекта класса в котором этот метод находиться.
Поясним на примере:
1public class StaticVarAndMethod {
2 // Статическая переменная
3 static int staticVar;
4 int NotStatic;
5
6 // Статический метод
7 public static void deposit(int amount) throws ArrayIndexOutOfBoundsException {
8 // Обращаемся к статическому полю staticVar
9 staticVar += amount;
10 }
11
12 public static void main(String args[]) {
13 StaticVarAndMethod staticVAndM = new StaticVarAndMethod();
14 StaticVarAndMethod staticVAndM1 = new StaticVarAndMethod();
15
16 // Как видим ниже, вызываем deposit через класс,
17 // а не через какой-либо объект.
18 StaticVarAndMethod.deposit(3); // Добавим 3 к staticVar
19
20 System.out.println(staticVAndM.staticVar);
21 System.out.println(staticVAndM1.staticVar);
22 // В обоих объектах staticVar теперь 3
23 }
24}
Вывод:

Следующие уроки
Внутренний класс
12
мин.
Статический класс
14
мин.
Ссылочные типы и типы значений
12
мин.