2016-10-20 59 views
3

我創建了,命名爲CAR,並且我還創建了一個名爲car接口爲什麼我的java類名和接口名稱只有字母大小寫?

它們都在同一個源文件中。我使CAR類實現了car接口,IDE顯示沒有錯誤。但是當我運行這個程序時,它給出的錯誤是

Exception in thread "main" java.lang.NoClassDefFoundError: test/car (wrong name: test/CAR)" 

這是爲什麼? JAVA不區分大小寫,是嗎?

下面的代碼:

package test; 

interface car { 
    void changespeed(int x); 
    void changeoil(int x); 
} 

class CAR implements car { 
    private int speed; 
    private int oil; 
    public CAR(int _speed,int _oil) { 
     speed = _speed; 
     oil = _oil; 
    } 
    public void changespeed(int x) { 
     speed = x; 
    } 
    public void changeoil(int x) { 
     oil = x; 
    } 
    public void Show() { 
     System.out.printf(speed + " " + oil); 
    } 
} 
public class test { 
    public static void main (String[] args) { 
     CAR a = new CAR(100,200); 
     a.changespeed(200); 
     a.changeoil(200); 
     a.Show(); 
    } 
} 
+1

建議:如果您想要可讀性和可理解性,請遵循語言的命名約定 – Li357

+0

不,我現在使用Windows。 –

+2

啊,我這麼認爲。 Windows文件系統不區分大小寫。 –

回答

7

從技術上講,你可以這樣做在某些平臺上。

  • 將在Linux/UNIX
  • 將在Mac OSX上可能工作,雖然你可能需要調整的東西打開「用戶友好」不區分大小寫的工作。

但是,讓您的代碼庫依賴於平臺執行區分大小寫的路徑名查找的能力是一個壞主意。而且它也是一個壞主意,忽略了Java樣式約定,明確指出:

  • 你不應該只定義大小寫不同的同一種類的標識符,
  • 你應該總是以一個類名一個大寫字母和
  • 全部大寫字母保留給常量。

問題是,用於查找類所在文件的標準Java機制依賴於能夠將類名映射到文件名,假設文件名區分大小寫。如果您遵循Java風格指南,該機制適用於所有平臺。如果你(故意的)不這樣做,你將會陷入一個痛苦的世界...而你不會得到太多的同情。 (但是,如果你設法把你的編譯類放到一個JAR文件中,並且類名稱是正確的,那麼即使在Windows上也是如此。不過如果你是一個好的方法, 。構建在Windows上)


因此,要回答你的問題:

爲什麼我不能用類似的詞作爲Java類名和剛剛情況不同接口的名字嗎?

因爲您正在使用Windows,並且因爲您忽略了Java樣式規則。

JAVA不區分大小寫,是嗎?

是的。


我還要指出的是,Show()是一種風格侵犯等等都是changespeed(...)changeoil(...)_speed_oil

如果你正在編寫的代碼只有你會閱讀,那麼你可以(主要)忽略忽略風格。但是如果你編寫其他人可能需要閱讀的代碼,那麼你可能會受到很多批評。

+0

謝謝!它幫助了我很多! –

1

Java是區分大小寫的,這是造成您麻煩的文件系統。你最好遵循命名約定。

通常,編譯一個.java文件可能會給你多個.class文件。基本上,源文件中的每個類都放入一個.class文件中。

就你而言,編譯器試圖生成三個文件:car.class,CAR.classtest.class。在將CAR.classcar.class作爲同一個文件的文件系統中,您將遇到問題。 當我們嘗試解壓縮在Linux系統下創建的東西時,出現了類似的問題,在同一個文件夾下有兩個文件名僅在字母大小寫方面不同。

解決方案?按照命名約定。基本上你必須以某種方式重新命名界面或類:

interface Car {} 
class MyCar implements Car {} 
+0

非常感謝,夥計 –

1

正如@Luke Lee所說,Windows文件系統不區分大小寫。

如果您編譯test.java程序,它應該讓他們的類名來命名類文件:

> javac test.java 

CAR.class 
car.class 
test.class 

但在Windows,CAR.classcar.class文件名被認爲是相同的文件名。

因此在運行時出現java.lang.NoClassDefFoundError

+0

是的,它確實發生在Windows中。 –

相關問題