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

时间:2012-05-11 06:48:33

标签: java eclipse compilation

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

int

以下是java文件内容:

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

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

更新

我在bin文件夹中删除了eclipse中的.class文件,并尝试执行该类,但无法编译,因此无法运行。但是当我创建一个具有公共类名称的源文件并且没有任何内容保存,然后添加上述内容时,它就起作用了。如果eclipse使用以前编译的版本来执行,它怎么能给出class A { public A(int x) { // } } public class B extends A { public static void main(String[] args) { System.out.println("Class b"); } } 方法的输出,因为它在成功完全编译时没有main方法?

3 个答案:

答案 0 :(得分:5)

实际上,eclipse尝试编译类并且由于构建错误而无法编译,当你只是运行那些执行先前编译的类的文件时,这些文件已经成功编译过了(eclipse尝试编译和构建文件)每个按照通用设置保存。)

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

答案 1 :(得分:1)

Eclipse不应该这样做。这会导致模棱两可的结果。如果无法编译类,则应删除其对应的.class文件。

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

答案 2 :(得分:1)

Eclipse使用自己的Java编译器(称为dtype)而不是ecj。这个编译器allows (partial) compilation of broken source files