Java - Когда это ошибка компилятора и когда это исключение во время выполнения? - PullRequest
4 голосов
/ 05 июля 2010

В настоящее время я учусь на сертификацию SCJP, используя Руководство по изучению Sierra and Bates, и во многих самотестах (пробные экзаменационные вопросы) я продолжаю сталкиваться с той же проблемой - я не могу сказать, будет ли конкретная ошибка время выполнения (исключение) или при компиляции (ошибка компиляции). Я знаю, что это немного неопределенный вопрос, и на него невозможно ответить, но как я могу определить, будет ли обнаружена ошибка во время компиляции или во время выполнения? Не могли бы вы прислать мне несколько ссылок на веб-сайт, которые могут мне помочь?

Ответы [ 3 ]

9 голосов
/ 05 июля 2010

Ошибка времени компиляции - компилятор Java не может скомпилировать код, часто из-за синтаксических ошибок. Типичные кандидаты:

  • пропущенные скобки
  • пропущенные точки с запятой
  • доступ к приватным полям в других классах
  • отсутствующие классы в пути к классам (во время компиляции)

Ошибка выполнения - код скомпилирован, может быть выполнен, но в какой-то момент вылетает , как будто у вас деление на ноль.

  • с использованием переменной, которая на самом деле null (может вызвать исключение NullPointerException)
  • использование недопустимых индексов для массивов
  • доступ к ресурсам, которые в данный момент недоступны (отсутствующие файлы, ...)
  • пропущенные классы в пути к классам (во время выполнения)

(«Сбои» на самом деле не правильный термин и используется только для иллюстрации того, что происходит)

2 голосов
/ 05 июля 2010

Нет простого ответа на это; чтобы увидеть, скомпилируется ли что-то, вы должны полностью понять спецификацию языка и задействованный API. По сути, вы должны действовать как компилятор, и никто не может сделать это идеально. Даже компиляторы не всегда точно следуют спецификации.

Существует множество угловых случаев MANY на языке Java. Вот почему такие вещи, как Java Puzzlers , настолько интригуют: люди не всегда могут сказать, будет ли что-либо компилироваться и / или если это произойдет, что на самом деле происходит.

Некоторые из более сложных областей языка Java:

  • Generics (Eclipse и javac компилятор не может даже договориться обо всем)
  • Разрешение перегрузки метода (один из самых сложных для понимания разделов JLS)

Похожие вопросы

0 голосов
/ 20 ноября 2017

В основном ошибки времени выполнения - это логические ошибки в вашем коде, даже если код синтаксически правильный. Ошибки компилятора относятся к ошибкам в вашем синтаксисе / семантике. Если в вашем коде есть ошибка компилятора, программа никогда не запустится (и проверит логику кода). Если у вас есть и синтаксические, и логические ошибки, сначала вы получите ошибку компилятора (синтаксическая ошибка), а затем при повторном запуске кода вы получите ошибку времени выполнения (логическая ошибка).

...