为什么java可以在eclipse中运行编译时错误

时间:2013-08-05 07:50:40

标签: java eclipse methods interface

    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()

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

Eclipse可以“修补”某些类别的编译错误,并且即使存在错误也运行程序。通常,您会看到一个对话框,其中包含以下内容:

  

所需项目中存在错误:

     

(项目名称)

     

继续推出?

     

[X]始终在不询问的情况下启动

如果选择Proceed,或者如果已禁用该对话框,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,那么您将永远不会看到此错误。