Топ-100Статические поля - CodOrbits
LogoCodOrbits

Раздел: ООП

Здесь вы познакомитесь с объектно-ориентированным программированием в Java: классы, наследование, инкапсуляция и полиморфизм и многое другое.

Все разделы
Иконка ООП

Статические поля

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}

Вывод:


Также бывают статические методы.

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

Search Icon

Статический метод не зависит от объекта, а значит его можно вызвать без создания объекта класса в котором этот метод находиться.

Поясним на примере:

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
мин.

Similar Articles Icon
Divider

Статический класс

14
мин.

Similar Articles Icon
Divider

Ссылочные типы и типы значений

12
мин.

Similar Articles Icon