3 回答

TA貢獻1862條經驗 獲得超6個贊
編譯器往往從當前目錄下開始,根據類的package名稱來搜索文件,所以我們應該把A.java放在F:\test\edu\main目錄下,并在F:\test下運行javac A.java命令,這樣就可以找到A.java文件了吧,可惜事與愿違,編譯報錯,找不到源文件!??!
因為上面可以根據包名找B.java是使用了編譯器自帶的make功能,而這里我們直接編譯A.java,沒有這個功能,也就是說直接編譯的時候不能根據包名找到相關的類,那我們該怎么辦呢?
其實解決方案很簡單,既然編譯器不能根據包名找到A類,那把A類的絕對路徑直接告訴編譯器,事實上就是這么做的,具體操作為:在命令行模式下進入F:\test目錄,然后運行編譯命令javac F:\test\edu\main\A.java,可以成功編譯生成A.class文件。(注意:如果不在此目錄下執(zhí)行編譯命令的話,就要將f:\test加入到當前的classpath中為make工具提供B.java的位置信息)
接下來就要運行這個class文件了,運行仍然在F:\test目錄下執(zhí)行(注意:如果不在此目錄下執(zhí)行運行命令的話,一定要把F:\test加入到當前的classpath中),命令為:java edu.main.A,很顯然,這里就是根據輸入的package名稱找到對應的class文件,并檢驗找到的class文件的與輸入的包名是否匹配(例如:如果你在edu目錄下新建一個test目錄,將A.class文件拷貝進去,輸入java edu.test.A 的話還是會報錯:找不到class文件)??赡苡腥艘獑枺簽槭裁催\行的時候又可以根據包名找到相應的class文件呢?因為運行的時候默認是從當前路徑開始搜索的,如果當前路徑找不到的話,就在系統(tǒng)的classpath中找,如果再找不到就會報錯。

TA貢獻1777條經驗 獲得超3個贊
package com.bj.wfj;
package是關鍵字,后面的自己定義,幾層都行,隨便寫,自動生成你所定義的包,呵呵。
補充下,這行代碼要放在第一行。
添加回答
舉報