Должен ли весь код в Java находиться внутри классов?

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

Ответ

Да, за редкими исключениями. В Java вся исполняемая логика должна быть определена внутри классов (или интерфейсов, начиная с Java 8). Это фундаментальный принцип объектно-ориентированного дизайна языка.

Что должно быть внутри класса:

  • Поля (переменные экземпляра и класса)
  • Методы (включая main)
  • Блоки инициализации
  • Вложенные классы

Что может находиться вне объявления класса:

  1. Объявление пакета (package) — должно быть первой строкой.
  2. Импорты (import) — следуют за пакетом.
  3. Объявления классов/интерфейсов/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 также не содержит кода внутри класса.