该程序运行后,会有编译错误::ClassA 没有实现接口方法f()
这个可以理解,理解不了的是,为什么编译错误的程序还能生成字节码文件并且运行呢?
该程序运行结果是:I am ClassAinterface InterfaceA{
int max=100;
void f();
}
interface InterfaceB extends InterfaceA{
void g();
}
class ClassA implements InterfaceB{
public void g(){
System.out.print("I am ClassA");
}
}
public class E {
public static void main(String[] args) {
ClassA a=new ClassA();
a.g();
}
}
这个可以理解,理解不了的是,为什么编译错误的程序还能生成字节码文件并且运行呢?
该程序运行结果是:I am ClassAinterface InterfaceA{
int max=100;
void f();
}
interface InterfaceB extends InterfaceA{
void g();
}
class ClassA implements InterfaceB{
public void g(){
System.out.print("I am ClassA");
}
}
public class E {
public static void main(String[] args) {
ClassA a=new ClassA();
a.g();
}
}
但是在eclipse下,写着有一处错误,但是却能生成E.class,也可以带着错误运行
希望牛人能给解释一下
等调用到才才知道错误的,也就是说字节码不保存各个类之间的关系个人简介,仅供参考
我问的是为什么可以带着错误执行该文件,而不是错误本身。
另外,我之前也没有编译过。5楼的同学比较有参考价值,我现在去看字节码文件,谢谢
但是只有类名和方法名就可以执行出I am ClassA 么?
public static void main(String[] args) {
ClassA a=new ClassA();
a.f();
}
}这段会报错,我估计classloader载入类的时候并不检查类与类之间的关系,只是在调用的时候才去检查,这样做我估计是性能上的考虑,载入的时候检查可能会涉及到很多类,速度会很慢还有jvm默认你编译出来的文件是正确的,这一点jvm只做简单的检查,就是magic number