Входят ли ошибки компилляции java в класс Throwable?

Есть иерархия исключений java, на вершине которой стоит класс Throwable.

Вопрос: является ли ошибка компиляции (к примеру я не поставил точку с запятой где надо) объектом класса Throwable? Если ошибка компиляции не является объектом класса Throwable, объект какого класса кидает нам IDE при компилляции некорректного текста программы?


Ответы (2 шт):

Автор решения: Andrew Kachalin

Да является. Класс Error наследует класс Throwable, часть ошибок Error конкретно описаны как:

That is, Error and its subclasses are regarded as unchecked exceptions for the purposes of compile-time checking of exceptions.

Таким образом Error и его подклассы рассматриваются как непроверяемые исключения для целей проверки исключений во время компиляции.

→ Ссылка
Автор решения: Дмитрий Никифоров

Ошибка компиляции может являться объектом класса Throwable. А может и не являться. Всё зависит от конкретной реализации компилятора.

Представим компилятор как чёрную коробку с прорезью, которая принимает java-файлы, а выдаёт class-файлы, или сообщение об ошибке компиляции. Что находится внутри коробки?

  • Если компилятор реализован на java, сообщения об ошибках могут быть результатом работы механизма исключений, а могут и не быть. Можно посмотреть исходники OpenJDK. Для этого нужно иметь представление об этапах компиляции: лексический разбор, синтаксический разбор и т.д.

  • Вообще, компилятор может быть реализован на каком-нибудь другом языке, тогда к исключениям Java он не будет иметь вообще никакого отношения.

Как бы то ни было, механизм выдачи ошибок компиляции никак не связан с вашей программой, которую вы компилируете. Если компилятор и бросает исключение, оно обрабатывается внутри компилятора, а вы получаете только результат -- строку с сообщением об ошибке.

Также механизм выдачи ошибок компилятора не связан с IDE. IDE может просто показывать вам сообщение, полученное от компилятора. Или может самостоятельно проверять код до запуска компилятора и показывать ошибки каким-то ещё способом (например, подчёркивать красным).

→ Ссылка