Что такое статический метод в Java?

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

Ответ

Статический метод — это метод, принадлежащий классу, а не конкретному экземпляру. Он вызывается через имя класса: ClassName.methodName().

Особенности и правила:

  • Нет доступа к this. Статический метод не может напрямую обращаться к нестатическим полям и методам класса, так как выполняется без контекста объекта.
  • Может обращаться только к статическим членам класса (другим статическим методам и полям).
  • Не может быть переопределен (overridden), но может быть скрыт (hidden) в подклассе.
  • Используется для утилитных функций, фабричных методов или методов, не зависящих от состояния объекта.

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

public class MathUtils {
    // Утилитный метод
    public static int max(int a, int b) {
        return a > b ? a : b;
    }

    // Фабричный метод
    public static LocalDate createDateFromString(String dateStr) {
        return LocalDate.parse(dateStr);
    }
}

// Вызов
int maximum = MathUtils.max(10, 20);
LocalDate date = MathUtils.createDateFromString("2023-12-01");

Почему main метод статический? JVM должна иметь возможность запустить программу, не создавая экземпляр какого-либо класса. Статический метод main предоставляет точку входа.

Важно: Злоупотребление статическими методами нарушает принципы ООП, так как они не работают с состоянием объекта и усложняют тестирование (их сложнее замокать).