Почему метод `main` в Java объявляется как `static`?

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

Ответ

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

Основные причины:

  1. Вызов без инстанциирования: JVM загружает класс, но не создаёт объект типа Main. Статический метод можно вызвать напрямую по имени класса: Main.main(args).
  2. Единая контрактная точка: Сигнатура public static void main(String[] args) — это строгое соглашение, которое JVM ищет для запуска. Нестатический метод потребовал бы от JVM механизма создания объекта, что усложнило бы запуск и сделало его неоднозначным.

Пример и что произошло бы, если бы main был нестатическим:

public class Application {
    // Стандартная точка входа
    public static void main(String[] args) {
        System.out.println("Программа запущена.");
        // Теперь можно создать экземпляры других классов
        Application app = new Application();
        app.run();
    }
    public void run() { /* ... */ }
}

Если бы main был нестатическим, JVM пришлось бы выполнить что-то вроде new Application().main(args), но для этого нужен был бы конструктор по умолчанию, а также возник бы вопрос: какой конструктор вызывать и как передавать аргументы? Это нарушило бы простоту и детерминированность запуска.

Итог: Ключевое слово static обеспечивает независимость метода от состояния конкретного объекта и позволяет JVM однозначно найти и выполнить стартовый код.