3 回答

TA貢獻1803條經驗 獲得超6個贊
其實解決方案很簡單,既然編譯器不能根據包名找到A類,那我們就把A類的絕對路徑直接告訴編譯器不就可以了嗎?事實上就是這么做的,具體操作為:在命令行模式下進入F:\test目錄,然后運行編譯命令javac F:\test\edu\main\A.java,可以成功編譯生成A.class文件。(注意:如果不在此目錄下執行編譯命令的話,就要將f:\test加入到當前的classpath中為make工具提供B.java的位置信息)
接下來就要運行這個class文件了,運行仍然在F:\test目錄下執行(注意:如果不在此目錄下執行運行命令的話,一定要把F:\test加入到當前的classpath中),命令為:java edu.main.A,很顯然,這里就是根據輸入的package名稱找到對應的class文件,并檢驗找到的class文件的與輸入的包名是否匹配(例如:如果你在edu目錄下新建一個test目錄,將A.class文件拷貝進去,輸入java edu.test.A 的話還是會報錯:找不到class文件)??赡苡腥艘獑枺簽槭裁催\行的時候又可以根據包名找到相應的class文件呢?因為運行的時候默認是從當前路徑開始搜索的,如果當前路徑找不到的話,就在系統的classpath中找,如果再找不到就會報錯。
由上面的分析我們可以得出:
(1)在命令行模式下編譯java文件時,如果cmd不在該java文件所在的目錄下,就要直接指定文件
的絕對路徑(javac F:\test\edu\main\A.java),如果在java文件所在的目錄下,可以不指定
路徑,但是要設置classpath讓編譯器的make工具找到其他import的類
(2)運行的時候要指出包路徑(java edu.main.A),并且一定要在class文件名前帶上完整的包名
(edu.main.A),而且該包所在的文件夾(即edu所在的文件夾)一定要在classpath中,這樣才
能找到對應的class文件(在包所在的文件夾目錄下運行cmd程序或者將該目錄加入到classpath
中均可)。
(3)在命令行模式下非直接編譯的java,編譯器使用make工具根據java文件中的import信息間接找
到引用的java文件,所以一定要注意文件的配置,以及相互之間的位置關系。當然也可以通過
設置classpath提供給make工具,但是如果文件比較多而且相互之間的引用關系比較復雜的話會
比較麻煩。
(4)classpath只能供make工具以及運行class文件時使用,在直接編譯的時候不使用classpath信
息,必須在要編譯的java文件前帶上其絕對的路徑名。

TA貢獻1966條經驗 獲得超4個贊
一、先建立一個包,把兩個類放到放進里面,然后調用編譯。
二、如果兩個類不在同一個包內,需要導入包名,用import 導入,
important 后面跟包的名稱,試試看。

TA貢獻1830條經驗 獲得超9個贊
NoClassDefFoundError異常 說明你A類里面不知道B類 我看是你的B類沒有public吧 一個類要能夠被另外一個類import必須的public 而不是default,你把B類的寫成如下在試試:
package ***;
public class B{
}
A類使用:
package **;// a的包名
import ***.B; //導入B
public class A{//your fun}
添加回答
舉報