2012-05-11 74 views
3

當在eclipse中執行以下java代碼時,它會給出正確的輸出(即打印'Class B'),但根據java規範,代碼無法編譯超類的構造函數需要一個參數int,而編譯器提供給B類的構造函數包含對超類無參數構造函數的調用,該構造函數沒有定義),並且當嘗試在命令行中使用javac命令編譯文件時,它只編譯超類,即A類和失敗,出現以下編譯錯誤:eclipse如何在編譯錯誤時執行java代碼

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的主要方法沒有bieng能夠編譯類。提前致謝。

UPDATE

我在bin文件夾中刪除.class文件creatd的日食,並試圖執行的類,它不能編譯,所以沒跑。但是當我創建一個帶有公共類名的源文件並保存沒有任何內容,然後添加上述內容時,它就起作用了。如果eclipse使用先前編譯的版本來執行,那麼它如何給出main方法的輸出,因爲它在成功完全編譯時沒有main方法?

+0

您正在執行相同的文件還是正在運行其他主類? –

+0

執行相同的文件 –

回答

5

實際上,eclipse試圖編譯這個類,並且由於構建錯誤而無法編譯,當你只是運行那些它執行了先前編譯過的類的文件時,它們之前成功編譯過(eclipse試圖編譯和生成文件根據通用設置每次保存)。

,以解決您可以嘗試運行之前清理項目,而在javac的情況下,它只是編譯,

+1

感謝您的答案,日食顯示編譯錯誤,但我的問題是如何eclipse執行代碼並給出輸出,儘管有編譯錯誤。 –

+3

其基於以前的編譯版本的文件,它只會替換那些成功編譯後的舊類文件 –

+0

嘗試清理該項目,但它仍然給出相同的輸出,並且,我創建了源文件並保存在(在輸入所有代碼後)在eclipse中,因此它是不可能有一個以前編譯的類的版本。 –

1

Eclipse中不應該這樣做。它導致了模糊的結果。如果一個類不能被編譯,那麼它的相應的.class文件應該被刪除。

如果您檢查bin文件夾,則存在B.class和A.class。不知道爲什麼它會創建B.class,即使B不編譯