javac не отображает ошибки компилятора? - PullRequest
0 голосов
/ 19 мая 2018

Я учу подругу некоторому Java, и мы сталкиваемся с проблемами, пытаясь запустить компилятор в ее программе Hello World.В коде была довольно явная ошибка (Sysrem.out.println), но в остальном он был полностью допустимым Java, но по какой-то причине компилятор не сообщал об ошибке.Вот что произошло:

  1. Когда мы запустили javac Hello.java в командной строке Windows, она напечатала пустую строку, а затем новую строку командной строки, как если бы операция прошла успешно, но она явно не имела 't - файл класса не был создан, и, конечно, в коде была ошибка, поэтому мы знали, что он не будет успешным.
  2. Когда мы запустили javac -verbose Hello.java, он распечатал кровавые подробности о классефайлы это загружало, но тогда это было это.Хотя он не закончил тем, что написал файл класса, он также не распечатал ошибку.
  3. После того, как мы исправили ошибку, программа скомпилировалась и запустилась без проблем, так что, похоже,будь то, что javac просто не любит печатать ошибки компилятора.

Что здесь может происходить, почему компилятор не сообщает об этой ошибке, как это должно быть?

Полная версиякод:

public class Hello {

    public static void main(String[] args) {
        Sysrem.out.println("Hello, world!");
    }

}

Командная строка:

C:\Users\MyFriendsName\Documents>javac Hello.java

C:\Users\MyFriendsName\Documents>

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Что на самом деле сводится к тому, является ли пустой файл допустимой программой Java.Удивительно, но это!

Вот грамматика для CompilationUnit ... это технический термин, который JLS использует для исходного файла Java:

CompilationUnit:
   OrdinaryCompilationUnit
   ModularCompilationUnit

OrdinaryCompilationUnit:
   [PackageDeclaration] {ImportDeclaration} {TypeDeclaration}

ModularCompilationUnit:
   {ImportDeclaration} ModuleDeclaration

(Ссылка: JLS 7.3 )

Обратите внимание, что элемент OrdinaryCompilationUnit позволяет иметь исходный файл, который состоит из:

  • без оператора пакета
  • нет операторов импорта
  • нет объявлений типов

Другими словами, пустой файл или файл, который просто содержит комментарии.

Короче говоря, если вы скажетеjavac для компиляции пустого файла он не вызовет ошибок компиляции ... потому что это "допустимый" файл исходного кода Java.

0 голосов
/ 19 мая 2018

Что ж, я обнаружил проблему: оказывается, моя подруга никогда не нажимала кнопку Сохранить в своем файле после ее создания, и, как я предполагаю, это просто некое интуитивно понятное ожидаемое поведение, javac не жалуется наполучая пустой файл!

Вот что именно произошло:

  • Создайте файл
  • Напишите код ошибки, но не сохраняйте файл
  • Попытка скомпилировать код и решить проблему, описанную в моем вопросе
  • Исправить ошибку в коде и сохранить файл
  • Скомпилировать и запустить код без проблем
...