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

Dil*_*sha 3 java eclipse compilation

当在eclipse中执行以下java代码时,它会给出正确的输出(即打印'Class B'),但根据java规范,代码无法编译(因为超类构造函数需要一个int参数和构造函数由编译器到B类包括对超类没有arg构造函数的调用,这是没有定义的),当尝试在命令行中使用javac命令编译文件时,它只编译超类即A类,并且失败并带有以下编译错误:

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

以下是java文件内容:

class A {

    public A(int x) {
        //
    }
}

public class B extends A {

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

有人可以解释eclipse如何在没有bieng能够编译类的情况下执行main方法.提前致谢.

UPDATE

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

Aka*_*dav 5

实际上,eclipse尝试编译类并且由于构建错误而无法编译,当你只是运行那些执行先前编译的类的文件时,之前已成功编译(eclipse尝试编译并在每次保存时构建文件为每个通用设置).

为了解决你可以尝试在运行之前清理项目,而在javac的情况下,它只是编译,

  • 它基于以前编译的文件版本,只会在编译成功后替换那些旧的类文件 (3认同)