为什么 Java 可以在 Eclipse 中运行时出现编译时错误


    interface A
    {
        public void f();
        public void g();
    }

   class B implements A
   {
       public void f() 
       {
            System.out.println("B.f()");
       }
   }
   public class Main 
   {
       public static void main(String[] args) 
       {
            B tmp = new B();
            tmp.f();
            System.out.println("B.f()");
       }
   }

我没有在 B 中的接口 A 中实现所有方法并且它有一个错误

    The type B must implement the inherited abstract method A.g()

但是为什么它可以获得输出

    B.f()
    B.f()

Eclipse 允许您运行带有编译时错误的代码 - 在给您警告并为您提供退出选项(您通常应该采取(之后。

如果尝试调用tmp.g()将收到指示编译时失败的异常。

有时运行未完全编译的代码可能很有用 - 特别是如果编译时失败与您实际希望运行的代码无关,例如在单元测试时 - 但我会非常小心你如何使用这个功能。

Eclipse可以"修补"某些类的编译错误,即使存在错误也可以运行程序。通常,您会看到一个对话框,内容如下:

所需项目中存在错误:

(项目名称(

继续启动?

[X] 始终不问就启动

如果选择"继续",或者禁用了该对话框,那么 Eclipse 将继续修复编译错误(如果可能(。如果尝试运行受编译错误影响的代码,则会出现运行时异常。

在本例中,Eclipse 添加一个虚拟B.g()方法,该方法仅包含以下内容:

throw new java.lang.Error("Unresolved compilation problem: n"
"The type B must implement the inherited abstract method A.g()");

通过插入此虚拟方法,代码将正确编译并运行。如果您从不调用B.g,那么您将永远不会看到此错误。

最新更新