今天早上我正在爲我的java認證編寫一些練習程序,並注意到我錯誤地輸入了一個包名,所以它與java文件所在的子目錄不匹配。我編譯了期望出現錯誤的代碼,但編譯的所有內容文件 - 甚至沒有警告。不要包必須匹配java文件所在的子目錄嗎?
我搜索了一下,我讀的大部分頁面都說包名必須與子目錄相匹配。我的經驗表明情況並非如此。
當我試圖運行該程序時,它不起作用,因爲.class文件位於錯誤的目錄中。我把它移動到正確的目錄,並得到這個錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/directory
/doesnt/even/exist/OtherPackageMemberModifiers (wrong name: com/sample/chap01/O
therPackageMemberModifiers)
所以我覺得我看到的是,Java代碼將編譯如果包和子目錄不匹配,但有如果你這樣做似乎不是一種運行代碼的方式。那是對的嗎?
的現象包路徑和目錄路徑是多餘的顯示出其討厭的頭。編譯器可能會發出錯誤。但是,這不會是100%:package src.main.java.com.sample ...或package com.sample。 ......仍然不會引發任何錯誤。 Javac需要基於目錄(-d),它基本上是基於文件的。 –