<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    手機(jī)技術(shù)交流

    funabmol

    2007年11月27日 #

    關(guān)于Java包導(dǎo)入的一個(gè)奇怪問(wèn)題(轉(zhuǎn)貼至 孫鑫)

    這篇文章起源于程序員之家論壇(http://www.sunxin.org)上的一個(gè)網(wǎng)友的提問(wèn),我對(duì)他的問(wèn)題做了回答。具體網(wǎng)址:http://www.sunxin.org/bbs/dispbbs.asp?boardID=6&ID=12289&page=1

    我感覺(jué)這個(gè)問(wèn)題的答案對(duì)Java的初學(xué)者來(lái)說(shuō),會(huì)有一定的幫助,所以將問(wèn)題和答案整理成文。

    問(wèn)題

    首先新建一個(gè)目錄存放Java源文件,或者直接在某個(gè)盤符下放置程序,例如:D:",然后按照下面的步驟進(jìn)行實(shí)驗(yàn)(本實(shí)驗(yàn)在D:"目錄下操作)。

    Step1:編寫程序World.java,代碼如下:

    package a;

    public class World

    {

        public World()

        {

        System.out.println(", World!");

        }

    }

    Step2:編寫Hello.java,代碼如下:

    import a.World;

    public class Hello

    {

        public static void main(String[] args)

        {

            System.out.print("Hello");

            World world = new World();

        }

    }

    Step3:將兩個(gè)程序保存到你所建的目錄下,在這里,我們將它們保存到D:"下。

    Step4:編譯這兩個(gè)Java源文件

           先編譯World.java,執(zhí)行javac -d . World.java,在D盤生成目錄a,及其中的World.class。接下來(lái)編譯Hello.java,執(zhí)行javac Hello.java,在D盤上生成Hello.class

    Step5:運(yùn)行Hello

           執(zhí)行java Hello,輸出Hello, World!目前一切正常。

    Step6:修改Hello.java

    將第1行的語(yǔ)句“import a.World;”改為“import a.*;”,重新編譯Hello.java,出現(xiàn)下面的錯(cuò)誤提示:

    錯(cuò)誤的類文件: ."World.java

    文件不包含類 World

    請(qǐng)刪除該文件或確保該文件位于正確的類路徑子目錄中。

            World world = new World();

            ^

    Step7:根據(jù)錯(cuò)誤提示進(jìn)行下列操作

    按照錯(cuò)誤提示,刪除 World.java 或者將 World.java 放到其他地方,則程序成功編譯運(yùn)行。

    問(wèn)題:

    請(qǐng)問(wèn)為何會(huì)出現(xiàn)Step6中的錯(cuò)誤呢?使用 import a.*;”導(dǎo)入a下所有類和接口,和使用“import a.World;”導(dǎo)入a包中具體的類,為何會(huì)產(chǎn)生上述的差異呢?

    回答

    當(dāng)你導(dǎo)入一個(gè)包中所有的類時(shí),javac在編譯時(shí)并不確定你要使用的World類是a包中的類,還是其他包中的類,它會(huì)根據(jù)你機(jī)器上的CLASSPATH環(huán)境變量的值去查找類,通常我們?cè)?/span>CLASSPATH中會(huì)設(shè)置一個(gè)點(diǎn)(.),表示當(dāng)前目錄,如果沒(méi)有CLASSPATH環(huán)境變量,那么在JDK1.4之后,默認(rèn)也是查找當(dāng)前目錄。javac在按照文件名(不包括后綴)來(lái)查找類,于是找到World.java,而這個(gè)文件根本不是字節(jié)碼文件,當(dāng)然就報(bào)錯(cuò)了。當(dāng)你導(dǎo)入一個(gè)具體的類時(shí),javac在分析源文件時(shí)就知道了你程序中用的類是a.World,那么它就在CLASSPATH環(huán)境變量下查找a目錄下的World類,正好有,于是正確執(zhí)行。

    為了幫助讀者對(duì)這個(gè)問(wèn)題加深理解,我給大家設(shè)計(jì)了下面的操作步驟(本文是在D盤上操作):

    1)將a目錄剪切到C:"下;
    2)再次執(zhí)行javac Hello.java,你會(huì)看到同樣的錯(cuò)誤。也就是證實(shí)了在出錯(cuò)之前,javac還沒(méi)有去查找a包中的類(對(duì)于包是否存在的驗(yàn)證已經(jīng)進(jìn)行)。
    3)執(zhí)行set classpath=c:"。由于你明確地設(shè)置了CLASSPATH環(huán)境變量的值,并且沒(méi)有包含點(diǎn)(.),因此javac不會(huì)再查找當(dāng)前的目錄。
    4)再次執(zhí)行javac Hello.java,你會(huì)發(fā)現(xiàn)成功執(zhí)行。

    這里面還有一個(gè)有趣的現(xiàn)象,如果我們將a目錄下的World.class刪除,替換為World.java,那么在編譯Hello.java時(shí),World也會(huì)被自動(dòng)編譯。

    posted @ 2007-11-27 13:52 smart 閱讀(415) | 評(píng)論 (1)編輯 收藏

    My Links

    Blog Stats

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲AV无码乱码在线观看性色扶| a毛片免费全部播放完整成| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲精品视频专区| 久久精品国产亚洲αv忘忧草| 18禁美女黄网站色大片免费观看 | 亚洲精品一区二区三区四区乱码| 成人国产精品免费视频| 国产成人免费午夜在线观看| 中文字幕日本人妻久久久免费| 1000部免费啪啪十八未年禁止观看| 亚洲av无码精品网站| 久久亚洲色WWW成人欧美| 亚洲一级片免费看| 韩国免费一级成人毛片| 国产精品亚洲w码日韩中文| 久久精品国产亚洲av麻豆色欲| 99亚洲精品卡2卡三卡4卡2卡| 在线人成免费视频69国产| 久久久久亚洲Av无码专| 麻豆视频免费播放| 亚洲AV无码国产剧情| 亚洲一区二区三区在线视频| 精品国产麻豆免费人成网站| 免费国产成人高清在线观看麻豆| 亚洲gv猛男gv无码男同短文| 免费国产黄网站在线观看| 亚洲一级片免费看| A片在线免费观看| 亚洲一级视频在线观看| 亚洲国产成人久久笫一页| 久99久精品免费视频热77| 亚洲?v无码国产在丝袜线观看| 亚洲国产系列一区二区三区| 波多野结衣免费一区视频| 亚洲国色天香视频| 最近2022中文字幕免费视频| 久久亚洲高清观看| 国产在线观看免费av站| 日本亚洲精品色婷婷在线影院| 久久经典免费视频|