Статические методы в Java вызываются у экземпляра или у класса?

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

Ответ

Статические методы вызываются у класса. Хотя синтаксис Java позволяет вызвать их через ссылку на экземпляр, это считается плохой практикой, так как скрывает их статическую природу и может ввести в заблуждение.

Почему у класса? Статические методы принадлежат классу, а не конкретному объекту. У них нет доступа к нестатическим (экземплярным) полям и методам, так как они не работают с состоянием this.

Пример и рекомендации:

class Utility {
    static void printInfo() {
        System.out.println("This is a static method.");
    }
}

// Правильный вызов (рекомендуется):
Utility.printInfo();

// Некорректный вызов (работает, но не рекомендуется):
Utility obj = new Utility();
obj.printInfo(); // Компилятор заменит это на Utility.printInfo()

Best Practice: Всегда вызывайте статические методы, используя имя класса (ClassName.staticMethod()). Это делает код понятнее и соответствует принципам чистого кода.