Что произойдет, если в Java-проекте несколько классов имеют метод `public static void main(String[] args)`?

«Что произойдет, если в Java-проекте несколько классов имеют метод `public static void main(String[] args)`?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Проект скомпилируется без ошибок. Проблема возникает на этапе запуска (execution), где необходимо явно указать, какой класс является точкой входа.

Поведение:

  1. Компиляция (javac): Успешна, так как метод main — это просто статический метод. Каждый класс может иметь свой.
  2. Запуск (java): Требует указания конкретного класса для исполнения.

Пример структуры:

// File: AppA.java
public class AppA {
    public static void main(String[] args) {
        System.out.println("Starting App A");
    }
}

// File: AppB.java
public class AppB {
    public static void main(String[] args) {
        System.out.println("Starting App B");
    }
}

Способы запуска:

  • Из командной строки: java AppA или java AppB.
  • В IDE: Выбор класса с методом main при конфигурации запуска.
  • В Maven/Gradle: Указание главного класса в настройках плагина (напр., maven-jar-plugin).

Практическое применение: Это позволяет создавать в одном проекте несколько самостоятельных приложений (например, основной сервис, утилиту для миграций, консольный клиент).