Что делает ключевое слово `static` в Java?

Ответ

Ключевое слово static в Java обозначает, что член класса (поле, метод, блок, вложенный класс) принадлежит самому классу, а не отдельным его экземплярам (объектам).

Основные особенности и применение:

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

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;
    }
}
// Использование
Employee emp1 = new Employee("Анна");
Employee emp2 = new Employee("Борис");
System.out.println(Employee.getEmployeeCount()); // Вывод: 2

2. Статический метод: Может обращаться только к статическим полям и методам. Не может использовать this.

class MathUtils {
    public static double square(double x) {
        return x * x;
    }
}
// Вызов без объекта
double result = MathUtils.square(5.0);

3. Статический блок инициализации: Выполняется один раз при загрузке класса.

class Config {
    static Properties props;
    static {
        props = new Properties();
        // Загрузка настроек из файла
    }
}

4. Статический вложенный класс: Вложенный класс, не имеющий доступа к нестатическим членам внешнего класса.

Ответ 18+ 🔞

А, слушай, про static в Java? Ну это ж классика, блядь! Прям как та самая общая водка на всех в общаге — один бутыль на всю комнату, а не у каждого своя под кроватью.

Вот смотри, если ты в классе объявляешь что-то static — это значит, что эта штука принадлежит самому классу, а не каждому отдельному объекту, который ты наштампуешь. Она как бы висит в облаке над всеми этими экземплярами, одна на всех. Загружается в память, когда класс первый раз дергают, и всё, пиздец, живёт там.

Обращаться к ней можно напрямую, по имени класса, даже если у тебя ни одного объекта нет. Типа ИмяКласса.статичнаяХуйня.

1. Статическое поле (она же — переменная класса). Это как общий счётчик в сортире, который считает, сколько раз все жильцы зашли по-маленькому. Все объекты тыкают в одну и ту же переменную.

class Работяга {
    private static int счетчикРаботяг = 0; // Вот она, общая для всех циферка
    private String имя;

    public Работяга(String имя) {
        this.имя = имя;
        счетчикРаботяг++; // Каждый новый работяга увеличивает ОБЩИЙ счётчик
    }

    public static int дайСчетчик() {
        return счетчикРаботяг;
    }
}
// Используем
Работяга р1 = new Работяга("Анна");
Работяга р2 = new Работяга("Борис");
System.out.println(Работяга.дайСчетчик()); // Выведет: 2, ёпта!

2. Статический метод. Это такой утилитарный инструмент, который работает сам по себе. Ему похуй на состояние конкретного объекта, он не видит this. Может трогать только другие статические штуки. Как калькулятор — кинул ему числа, получил результат.

class МатематикДляБедных {
    public static double квадрат(double x) {
        return x * x;
    }
}
// Вызов, блядь, без всякого объекта
double итог = МатематикДляБедных.квадрат(5.0);

3. Статический блок инициализации. Вот это прикол, да. Код, который выполнится ровно ОДИН РАЗ, когда класс грузят. Как будто класс перед первым использованием говорит: "Так, щас я тут кое-что подготовлю на всю оставшуюся жизнь".

class Конфиг {
    static Properties настройки;
    static {
        настройки = new Properties();
        // Тут можно, например, файл с настройками загрузить, один раз и нахуй
    }
}

4. Статический вложенный класс. Ну это уже, блядь, высший пилотаж. Класс внутри класса, но он как бы самостоятельный, отвязанный. Не лезет в нестатические дела внешнего класса, живёт своей жизнью. Просто ему удобно внутри другого класса квартировать.

Короче, static — это про "одна на всех". Удобно, но если начать везде пихать, можно такую кашу с зависимостями заварить, что потом разгребать будешь, ебать мои старые костыли. Используй с умом, а не как мартышлюшка с гранатой.