/ / Как затъмнението изпълнява java код, когато има грешки при компилирането - java, eclipse, компилация

Как затъмнение изпълнява java кода, когато има компилационни грешки - java, eclipse, compilation

Когато се изпълни следващият java кодeclipse, той дава правилния изход (т.е. отпечатва "Class B"), но според java спецификацията, кодът не може да бъде компилиран (тъй като конструкторът на суперклас изисква int аргумент и конструктор, предоставен откомпилаторът към клас В включва обаждане към супер клас без конструктор на arg, който не е дефиниран) и когато се опита да компилира файла с командата javac в командния ред, той компилира само суперклас, т.е. грешка:

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

Съдържанието на Java файла е следното:

class A {

public A(int x) {
//
}
}

public class B extends A {

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

Може ли някой да обясни как затъмнението изпълнява основния метод, без да може да се състави класът. Благодаря предварително.

UPDATE

Изтрих.class файл създаден от eclipse в папката bin и се опита да изпълни класа, и той не може да бъде компилиран, затова не се стартира. Ако затъмнението използва предварително компилираната версия, за да я изпълни, как би могла да даде изхода на main метод, тъй като не е имал main метод в момента на успеха пълна компилация?

Отговори:

1 за отговор № 1

Eclipse използва свой собствен компилатор на Java (наречен ecj) вместо javac, Този компилатор позволява (частично) компилиране на счупени източници.


5 за отговор № 2

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

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


1 за отговор № 3

Eclipse не трябва да "прави това. Това води до двусмислени резултати. Ако клас не може да бъде компилиран, тогава съответният .class файл трябва да бъде премахнат.

Ако проверите папката bin, B.class и A.class присъстват. Не съм сигурен защо създава B.class, въпреки че B не се компилира