Ответ
Ключевое слово static обозначает, что член класса (поле, метод, блок или вложенный класс) принадлежит самому классу, а не его экземплярам. Он загружается в память при инициализации класса.
Основные области применения:
1. Статические поля (переменные класса) Общая память для всех экземпляров. Часто используются для констант, счётчиков или общего состояния.
class Employee {
private static int employeeCount = 0; // Счётчик всех созданных сотрудников
private String name;
public Employee(String name) {
this.name = name;
employeeCount++; // Изменяется общее для класса поле
}
public static int getEmployeeCount() {
return employeeCount;
}
}
2. Статические методы Могут быть вызваны без создания экземпляра класса. Не имеют доступа к нестатическим полям и методам.
class MathUtils {
public static double calculateCircleArea(double radius) {
return Math.PI * radius * radius;
}
}
// Вызов:
double area = MathUtils.calculateCircleArea(5.0);
3. Статические блоки инициализации Выполняются один раз при загрузке класса. Используются для сложной инициализации статических полей.
class Config {
static Properties props;
static {
props = new Properties();
try {
props.load(new FileInputStream("config.properties"));
} catch (IOException e) {
// Обработка ошибки
}
}
}
4. Статические вложенные классы Не требуют экземпляра внешнего класса для создания. Часто используются для логической группировки.
class Outer {
static class Nested { // Может быть создан как new Outer.Nested()
// Не имеет неявной ссылки на экземпляр Outer
}
}
Важно: Злоупотребление static нарушает принципы ООП, так как создаёт глобальное состояние, усложняет тестирование и может привести к проблемам в многопоточных сценариях.