Короткий ответ
Потому что в момент запуска приложения у JVM ещё нет ни одного объекта класса, а метод main() нужно вызвать до создания каких-либо экземпляров. Объявление static позволяет JVM обратиться к методу через сам класс, без объекта, — это и есть вход в программу.
Как это работает подробнее
Каноническая сигнатура: public static void main(String[] args). Здесь public — доступность метода для JVM извне, void — метод ничего не возвращает, а String[] args — массив аргументов командной строки. Если убрать static, компиляция пройдёт, но при запуске JVM не найдёт подходящий метод и завершится ошибкой вида Main method is not static.
- Точка входа — JVM находит метод с канонической сигнатурой и вызывает его, не создавая экземпляр класса.
- Перегрузка — другие перегруженные варианты main() допустимы, но запускается только вариант с массивом String.
- Инициализация — первые объекты приложения создаются уже внутри main(), что решает проблему «курицы и яйца».
Пример кода
Main.java
public class Main {
// без static запуск завершится: Error: Main method is not static
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}Что использовать на практике
- Всегда объявляй точку входа как public static void main(String[] args) — это каноническая сигнатура для запуска java Main.
- Внутри main() создавай нужные объекты и передавай управление, например new Application().run(args).
- Аргументы командной строки получай из параметра args, а не из глобального состояния.