Ответ
Статические переменные (поля класса) — это переменные, объявленные с модификатором 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, могут быть источником проблем в многопоточных сценариях, так как разделяются между всеми потоками. Требуется синхронизация.