当下面的java代码在eclipse中执行时,它给出了正确的输出(即打印'Class B'),但根据java规范,代码无法编译(因为超类构造函数需要一个int
编译器为类 B 提供的参数和构造函数包括对超类(无参数构造函数)的调用,该构造函数未定义),并且当尝试在命令行中使用 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 方法吗?提前致谢。
UPDATE
我删除了bin文件夹中由eclipse创建的.class文件并尝试执行该类,但它无法编译,因此没有运行。但是当我用公共类名创建一个源文件并保存时没有任何内容,然后添加上述内容时,它就起作用了。如果eclipse使用之前编译的版本来执行,它怎么会给出以下输出:main
方法,因为它没有main
成功完全编译时的方法?
实际上,eclipse 尝试编译该类,但由于构建错误而无法编译,当您只需运行这些文件时,它会执行先前编译的类,这些文件之前已成功编译(eclipse 尝试在每个另存为上编译和构建文件)根据通用设置)。
为了解决这个问题,您可以尝试在运行之前清理项目,而在 javac 的情况下,它只是编译,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)