Что такое статические переменные в Java и к чему они относятся?

«Что такое статические переменные в Java и к чему они относятся?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статические переменные (поля класса) — это переменные, объявленные с модификатором static. Они принадлежат самому классу, а не какому-либо отдельному объекту (экземпляру) этого класса.

Основные характеристики:

  • Единственный экземпляр: В памяти существует только одна копия статической переменной, независимо от количества созданных объектов класса.
  • Время жизни: Инициализируется при первой загрузке класса в JVM и существует до завершения работы программы.
  • Область видимости: Доступна через имя класса (ClassName.variableName), а также через ссылку на объект (но это не рекомендуется по стилю).

Пример и использование:

public class Employee {
    private String name;          // Нестатическое поле (у каждого сотрудника своё)
    private static int count = 0; // Статическое поле (общее для всех сотрудников)

    public Employee(String name) {
        this.name = name;
        count++; // Увеличиваем общий счётчик при создании ЛЮБОГО нового объекта
    }

    public static void main(String[] args) {
        new Employee("Анна");
        new Employee("Пётр");
        // Обращение через имя класса
        System.out.println("Всего сотрудников: " + Employee.count); // Вывод: 2
    }
}

Важные ограничения:

  • Статические методы могут напрямую обращаться только к другим статическим членам класса. Для доступа к нестатическим полям и методам им требуется объект класса.
  • Статические переменные, если они не являются final, могут быть источником проблем в многопоточных сценариях, так как разделяются между всеми потоками. Требуется синхронизация.