Ответ
Да, за редкими исключениями. В Java вся исполняемая логика должна быть определена внутри классов (или интерфейсов, начиная с Java 8). Это фундаментальный принцип объектно-ориентированного дизайна языка.
Что должно быть внутри класса:
- Поля (переменные экземпляра и класса)
- Методы (включая
main) - Блоки инициализации
- Вложенные классы
Что может находиться вне объявления класса:
- Объявление пакета (
package) — должно быть первой строкой. - Импорты (
import) — следуют за пакетом. - Объявления классов/интерфейсов/enum/аннотаций — это и есть основные структурные единицы.
Пример корректной структуры:
package com.example.app; // Вне класса
import java.util.List; // Вне класса
public class Main { // Объявление класса
// Код внутри класса
private static final String GREETING = "Hello";
public static void main(String[] args) { // Метод внутри класса
System.out.println(GREETING + " World!");
}
}
Некорректно (вызовет ошибку компиляции):
// System.out.println("Hello"); // ОШИБКА: оператор вне класса
// public static void main(...) { ... } // ОШИБКА: метод вне класса
Исключением являются модули (Java Platform Module System), где module-info.java также не содержит кода внутри класса.