• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Cmd模式下帶有package的Java程序的編譯和運(yùn)行

      2017-10-21 12:11:43張亞利
      科技風(fēng) 2017年12期
      關(guān)鍵詞:編譯器

      摘要:Java中采用package來(lái)對(duì)類(lèi)進(jìn)行統(tǒng)一管理,從而有效避免類(lèi)名沖突的問(wèn)題。多數(shù)開(kāi)發(fā)工具習(xí)慣性地把程序放在不同package里。然而,在cmd模式下,編譯和運(yùn)行帶有package的程序時(shí),往往找不到類(lèi),本文針對(duì)該問(wèn)題,進(jìn)行分析并給出解決方法。

      關(guān)鍵詞:Java;Package;編譯器;完全路徑

      在開(kāi)發(fā)復(fù)雜的Java項(xiàng)目時(shí),程序員很難確保自己選用的類(lèi)名和其他程序員選擇的類(lèi)名完全不同。為避免類(lèi)名的沖突,Java使用包(package)對(duì)類(lèi)進(jìn)行統(tǒng)一管理。

      Java中的包,相當(dāng)于文件中的目錄,目錄名即是包名,如目錄結(jié)構(gòu)為ch5/bean,包名即為ch5.bean;在bean目錄中創(chuàng)建java類(lèi),并在文件的開(kāi)頭添加package ch5.bean;工程根目錄中的java類(lèi)文件未特別指定包名的情況下,即不使用package語(yǔ)句時(shí),該程序默認(rèn)放在缺省包中。事實(shí)上,我們?cè)谧鲩_(kāi)發(fā)的時(shí)候,習(xí)慣性地把每個(gè)類(lèi)都放在不同功能的package里。

      于是,常常有這樣的問(wèn)題出現(xiàn):“為什么在MyEclipse下能夠正在編譯和運(yùn)行的帶有package的程序,在cmd模式下總是提示找不到類(lèi)呢?”。今日,我們將針對(duì)“帶有package的Java程序的編譯和運(yùn)行的問(wèn)題”進(jìn)行詳細(xì)的剖析。

      舉例說(shuō)明,Demo1位于缺省包,Demo2_1(有包)和Demo2_2(有包,同時(shí)還調(diào)用其他包中的類(lèi))位于包c(diǎn)h5當(dāng)中,Demo3位于ch5.bean當(dāng)中,接下來(lái)我們對(duì)以下四段代碼進(jìn)行分析。

      第一個(gè)類(lèi)Demo1:

      public class Demo1 {

      public static void main(String[] args) {

      System.out.print(“我在缺省包下....”); }

      }

      第二個(gè)類(lèi)Demo2_1:

      package ch5;

      public class Demo2 {

      public static void main(String[] args) {

      System.out.print(“我在package ch5....”);}}

      第三個(gè)類(lèi)Demo2_2:

      package ch5;

      import ch5.bean.Demo3;

      public class Demo2 {

      public static void main(String[] args) {

      System.out.println(“我在package ch5下....”);

      Demo3 td = new Demo3(); //調(diào)用Demo3

      td.show();}}

      第四個(gè)類(lèi)Demo3:

      package ch5.bean;

      public class Demo3 {

      public void show()

      {System.out.print(“我是Demo3,位于ch5.bean下......”);}}

      現(xiàn)在,假設(shè)我們將項(xiàng)目TestPackage放置在D盤(pán),目錄結(jié)構(gòu)如下:

      圖1 文件目錄

      下面我們將在cmd模式下對(duì)程序進(jìn)行編譯和運(yùn)行:

      1)按下列命令編輯和運(yùn)行Demo1,將得到正常的結(jié)果。

      D:\TestPackage>javac Demo1.java

      D:\TestPackage>java Demo1

      我在缺省包下....

      分析:該例子,不屬于任何包中,也沒(méi)有相互的調(diào)用關(guān)系,可以獨(dú)立編譯和運(yùn)行。

      2)按下列命令進(jìn)行編輯和運(yùn)行Demo2_1,程序?qū)⒊霈F(xiàn)如下異常。

      D:\TestPackage>ch5>javac Demo2_1.java

      D:\TestPackage>ch5>java Demo2_1

      Exception in thread “main” java.lang.NoClassDefFoundError:Demo2_1 (wrong na

      me:ch5/Demo2_1)

      分析:該類(lèi)位于ch5包中,沒(méi)有相互調(diào)用關(guān)系。可以進(jìn)入目錄ch5中編譯,也可以用:D:\TestPackage> javac ch5/Demo2_1.java來(lái)對(duì)代碼進(jìn)行編譯。但運(yùn)行時(shí),系統(tǒng)會(huì)在當(dāng)前目錄D:\TestPackage\ch5下,尋找ch5/Demo2_1,所以會(huì)出現(xiàn)找不到類(lèi)的錯(cuò)誤。因此,運(yùn)行時(shí)必須退出到包名對(duì)應(yīng)的文件夾之外,如下命令可得到對(duì)應(yīng)的結(jié)果:

      D:\TestPackage>java ch5/Demo2_1

      我在package ch5下....

      3)按下列命令進(jìn)行編輯和運(yùn)行Demo2_2,程序?qū)⒊霈F(xiàn)如下異常。

      D:\TestPackage\ch5>javac Demo2_2.java

      錯(cuò)誤1:程序包c(diǎn)h5.bean不存在

      錯(cuò)誤2:找不到符號(hào)Demo3;

      分析:該類(lèi)位于ch5包中,同時(shí)調(diào)用了ch5/bean下的Demo3。由于Demo2_2中引用了Demo3,而java本身具有類(lèi)似于make的功能,因此無(wú)需對(duì)Demo3進(jìn)行單獨(dú)的編譯,對(duì)Demo2_2進(jìn)行編譯時(shí)會(huì)自動(dòng)生成Demo3的class文件,但是這里一定要強(qiáng)調(diào)的是兩個(gè)文件的存放位置。Demo2_2中有句代碼import ch5.bean.Demo3至關(guān)重要,這句代碼,表示Demo2_2從當(dāng)前目錄下即D:/TestPackage/ch5,開(kāi)始尋找ch5/bean/目錄下的Demo3類(lèi),即D:/TestPackage/ch5/ch5/bean/Demo3.java。這時(shí),該目錄顯然不存在。

      為解決該問(wèn)題,我們可以將復(fù)雜問(wèn)題簡(jiǎn)單化,直接將Demo2_2的路徑告知編譯器,方法如下。

      D:\TestPackage>javac ch5/Demo2_2.java

      D:\TestPackage>java ch5/Demo2_2

      我在package ch5下....

      我是Demo3,位于ch5.bean下......

      綜上分析,我們不難發(fā)現(xiàn),帶有package的程序,最容易出現(xiàn)錯(cuò)誤的地方就是編譯器找不到類(lèi),本文給出的解決方法是命令行給出程序的全路徑。當(dāng)然,我們也可以考慮,把包的路徑配置到環(huán)境變量中,然而,這種方法操作起來(lái),過(guò)于繁瑣,本文不推薦采用。

      作者簡(jiǎn)介:張亞利(1981),女,河南沁陽(yáng)人,漢族,碩士研究生,講師,研究方向:計(jì)算機(jī)軟件開(kāi)發(fā)。

      猜你喜歡
      編譯器
      基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
      運(yùn)行速度大突破華為《方舟編譯器》詳解
      Microchip為MPLAB XC系列專(zhuān)業(yè)版編譯器推出低成本可續(xù)訂包月許可證
      通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
      編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)
      基于ARM嵌入式平臺(tái)的x86譯碼SOC架構(gòu)設(shè)計(jì)
      海阳市| 北海市| 西贡区| 阜阳市| 金川县| 宽甸| 迁西县| 无棣县| 米易县| 修文县| 渭源县| 乃东县| 额尔古纳市| 阿勒泰市| 丹棱县| 沈阳市| 历史| 清水县| 涞水县| 高碑店市| 哈密市| 榆社县| 三都| 凭祥市| 疏勒县| 石台县| 景东| 灌南县| 出国| 嘉善县| 清水县| 沁源县| 当阳市| 通江县| 乡宁县| 兴化市| 离岛区| 东乡族自治县| 齐齐哈尔市| 砀山县| 太和县|