Статические поля в 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. } }

Вывод:


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

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

Search Icon

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

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

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.
Time to read: 14

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

Объяснение различий ссылочных типов и типов значений в Java. Как работают объекты и примитивы в памяти? Практические примеры с классами.
Time to read: 12