当存在编译错误时eclipse如何执行java代码

当存在编译错误时eclipse如何执行java代码,java,eclipse,compilation,Java,Eclipse,Compilation,在eclipse中执行以下java代码时,它会给出正确的输出(即打印“Class B”),但根据java规范,代码无法编译(因为超类构造函数需要一个int参数,并且编译器向类B提供的构造函数包括对超类no-arg构造函数的调用,该构造函数未定义),当尝试在命令行中使用javac命令编译文件时,它只编译超类,即class A,并失败,出现以下编译错误: B.java:8: cannot find symbol symbol : constructor A() location: class A

在eclipse中执行以下java代码时,它会给出正确的输出(即打印“Class B”),但根据java规范,代码无法编译(因为超类构造函数需要一个
int
参数,并且编译器向类B提供的构造函数包括对超类no-arg构造函数的调用,该构造函数未定义),当尝试在命令行中使用javac命令编译文件时,它只编译超类,即class A,并失败,出现以下编译错误:

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");
    }
}
有人能解释一下eclipse是如何在不编译类的情况下执行main方法的吗

更新


我删除了由eclipse在bin文件夹中创建的.class文件,并尝试执行该类,但该类无法编译,因此没有运行。但是,当我创建了一个带有公共类名的源文件,并保存了该文件,但没有任何内容,然后添加了上述内容时,该文件起到了作用。如果eclipse使用以前编译的版本来执行该类,如何执行它能给出
main
方法的输出吗,因为它在成功完成完整编译时没有
main
方法?

实际上,eclipse试图编译类,但由于构建错误,它无法编译,当您只运行它执行以前编译过的类的文件时,这些文件成功地被compiled较早(eclipse尝试根据常规设置在每个“另存为”上编译和构建文件)


为了解决这个问题,您可以在运行之前尝试清理项目,而对于javac,它只是编译,Eclipse不应该这样做。这会导致不明确的结果。如果类无法编译,则应删除其相应的.class文件


如果您检查bin文件夹,则B.class和A.class都存在。不确定为什么它会创建B.class,即使B不编译

Eclipse使用自己的Java编译器(称为
ecj
)不是
javac
。而是这个编译器。

谢谢你的回答,eclipse显示了编译错误,但我的问题是,尽管有编译错误,eclipse如何执行代码并给出输出。它基于文件的先前编译版本,只会在成功编译后替换那些旧类文件项目,但它仍然提供相同的输出,而且,我创建了源文件并在最后保存(输入所有代码后)因此,在eclipse中,不可能有一个以前编译过的类版本。但是当我们这样做时,它会报告问题,我根本无法运行,您能否尝试创建一个新的工作区,看看它是否工作根据我问题的更新,我不明白的是eclipse如何将源代码的新部分插入到以前编译过的类。您是在执行同一个文件还是在运行其他主类?