Вопрос по java, eclipse – Как eclipse выполняет Java-код при возникновении ошибок компиляции

3

Когда следующий код Java выполняется в Eclipse, он дает правильный вывод (то есть печатает «класс B»), но согласно спецификации Java код не может быть скомпилирован (так как конструктор суперкласса требуетint Аргумент и конструктор, предоставляемые компилятором для класса B, включают в себя вызов суперкласса без конструктора arg (который не определен), а при попытке скомпилировать файл с помощью команды javac в командной строке он компилирует только супер класс, т.е. A и завершается со следующей ошибкой компиляции:

<code>B.java:8: cannot find symbol
symbol  : constructor A()
location: class A
public class B extends A {
   ^
1 error
</code>

Ниже приводится содержимое файла Java:

<code>class A {

    public A(int x) {
        //
    }
}

public class B extends A {

    public static void main(String[] args) {
        System.out.println("Class b");
    }
}
</code>

Может кто-нибудь объяснить, как eclipse выполняет метод main без возможности bieng скомпилировать класс. Заранее спасибо.

UPDATE

Я удалил файл .class, созданный eclipse, в папке bin и попытался выполнить класс, но его не удалось скомпилировать, поэтому он не запустился. Но когда я создал исходный файл с общедоступным именем класса и сохранил его без содержимого, а затем добавил вышеупомянутое содержимое, это сработало. Если eclipse использует ранее скомпилированную версию для выполнения, как она может дать выводmain метод, так как он не имелmain метод на момент успеха полной компиляции?

выполнение того же файла Dilini Rajapaksha
Вы выполняете тот же файл или другой основной класс? Nitin Chhajer

Ваш Ответ

3   ответа
1

Eclipse использует свой собственный компилятор Java (называемыйecj) вместоjavac, Этот компиляторпозволяет (частично) компилировать испорченные исходные файлы.

5

На самом деле eclipse пытается скомпилировать класс и не может скомпилировать его из-за ошибок сборки, когда вы просто запускаете те файлы, в которых он выполнял ранее скомпилированный класс, которые были успешно скомпилированы ранее (eclipse пытается компилировать и создавать файлы при каждом сохранении как за общие настройки).

чтобы решить проблему, вы можете попробовать очистить проект перед запуском, а в случае с javac он просто компилируется,

Пробовал очистить проект, но он все равно дает тот же вывод, а также я создал исходный файл и сохранил в конце (после ввода всего кода) в eclipse, поэтому невозможно иметь предварительно скомпилированную версию класса. Dilini Rajapaksha
основанный на предыдущей скомпилированной версии файла, он заменит только те старые файлы классов после успешной компиляции
Но когда мы делаем то же самое, он сообщает о проблеме, не может работать вообще, не могли бы вы попробовать создать новое рабочее пространство и посмотреть, работает ли он там
Согласно обновлению моего вопроса, я не понимаю, как Eclipse вставляет новые части исходного кода в ранее скомпилированный класс. Dilini Rajapaksha
Спасибо за ответ, eclipse показывает ошибку компиляции, но мой вопрос заключается в том, как eclipse выполняет код и выдает результат, несмотря на наличие ошибок компиляции. Dilini Rajapaksha
1

Затмение не должно этого делать. Это приводит к неоднозначным результатам. Если класс не может быть скомпилирован, то соответствующий ему файл .class должен быть удален.

Если вы проверите папку bin, B.class и A.class присутствуют. Не уверен, почему он создает B.class, хотя B не компилируется

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