3 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
編譯器往往從當(dāng)前目錄下開始,根據(jù)類的package名稱來(lái)搜索文件,所以我們應(yīng)該把A.java放在F:\test\edu\main目錄下,并在F:\test下運(yùn)行javac A.java命令,這樣就可以找到A.java文件了吧,可惜事與愿違,編譯報(bào)錯(cuò),找不到源文件!?。?br/>
因?yàn)樯厦婵梢愿鶕?jù)包名找B.java是使用了編譯器自帶的make功能,而這里我們直接編譯A.java,沒有這個(gè)功能,也就是說(shuō)直接編譯的時(shí)候不能根據(jù)包名找到相關(guān)的類,那我們?cè)撛趺崔k呢?
其實(shí)解決方案很簡(jiǎn)單,既然編譯器不能根據(jù)包名找到A類,那把A類的絕對(duì)路徑直接告訴編譯器,事實(shí)上就是這么做的,具體操作為:在命令行模式下進(jìn)入F:\test目錄,然后運(yùn)行編譯命令javac F:\test\edu\main\A.java,可以成功編譯生成A.class文件。(注意:如果不在此目錄下執(zhí)行編譯命令的話,就要將f:\test加入到當(dāng)前的classpath中為make工具提供B.java的位置信息)
接下來(lái)就要運(yùn)行這個(gè)class文件了,運(yùn)行仍然在F:\test目錄下執(zhí)行(注意:如果不在此目錄下執(zhí)行運(yùn)行命令的話,一定要把F:\test加入到當(dāng)前的classpath中),命令為:java edu.main.A,很顯然,這里就是根據(jù)輸入的package名稱找到對(duì)應(yīng)的class文件,并檢驗(yàn)找到的class文件的與輸入的包名是否匹配(例如:如果你在edu目錄下新建一個(gè)test目錄,將A.class文件拷貝進(jìn)去,輸入java edu.test.A 的話還是會(huì)報(bào)錯(cuò):找不到class文件)??赡苡腥艘獑?wèn):為什么運(yùn)行的時(shí)候又可以根據(jù)包名找到相應(yīng)的class文件呢?因?yàn)檫\(yùn)行的時(shí)候默認(rèn)是從當(dāng)前路徑開始搜索的,如果當(dāng)前路徑找不到的話,就在系統(tǒng)的classpath中找,如果再找不到就會(huì)報(bào)錯(cuò)。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
package com.bj.wfj;
package是關(guān)鍵字,后面的自己定義,幾層都行,隨便寫,自動(dòng)生成你所定義的包,呵呵。
補(bǔ)充下,這行代碼要放在第一行。
添加回答
舉報(bào)