亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,請問該如何用命令行編譯package中的java文件?具體如下:

您好,請問該如何用命令行編譯package中的java文件?具體如下:

幕布斯7119047 2021-11-02 10:06:30
我寫了兩個源文件 一個有main函數的 記做A.java 另一個是B.javaA.java 開頭不加package ***; 的時候是可以成功的單獨編譯運行的?,F在我想在A中使用B的內容 所以在AB前面都加了 package ***; 的語句可是這樣編譯的時候只有B.java能通過編譯,A.java提示Exception in thread "main" java.lang.NoClassDefFoundError請問這是怎么一回事,我怎樣做才能使AB都能通過編譯并運行?另外是只要在包中文件頭都加上package 包名; 就行嗎?還是要寫import之類的?編譯的時候用的是這樣的命令:javac -d.B.javajavac A.java兩個編譯都通過運行java A 的時候 提示Exception in thread "main" java.lang.NoClassDefFoundError
查看完整描述

3 回答

?
慕碼人8056858

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文件前帶上其絕對的路徑名。



查看完整回答
反對 回復 2021-11-06
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

一、先建立一個包,把兩個類放到放進里面,然后調用編譯。
二、如果兩個類不在同一個包內,需要導入包名,用import 導入,
important 后面跟包的名稱,試試看。

查看完整回答
反對 回復 2021-11-06
?
慕標琳琳

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}

 


查看完整回答
反對 回復 2021-11-06
  • 3 回答
  • 0 關注
  • 464 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號