Что такое compile time в контексте Java?

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

Ответ

Compile time (время компиляции) — это этап, на котором исходный код Java (файлы .java) преобразуется компилятором (javac) в байт-код (файлы .class).

На этом этапе происходят:

  1. Синтаксический анализ и построение абстрактного синтаксического дерева (AST).
  2. Проверка типов (type checking) и разрешение имен.
  3. Оптимизации на уровне байт-кода (очень ограниченные).

Ошибки времени компиляции (compile-time errors) возникают из-за нарушений правил языка, которые компилятор может обнаружить статически, без запуска программы.

Примеры ошибок:

int number = "text"; // Ошибка: несовместимые типы
System.out.println(undeclaredVariable); // Ошибка: cannot find symbol
String s = null;
s.length(); // Компиляция пройдет! Это ошибка времени выполнения (NullPointerException).

Ключевое отличие от Runtime: Ошибки времени выполнения (например, NullPointerException, ArrayIndexOutOfBoundsException) возникают уже после успешной компиляции, во время выполнения программы JVM.