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

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

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

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

    funabmol

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

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

    我感覺這個問題的答案對Java的初學(xué)者來說,會有一定的幫助,所以將問題和答案整理成文。

    問題

    首先新建一個目錄存放Java源文件,或者直接在某個盤符下放置程序,例如: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:將兩個程序保存到你所建的目錄下,在這里,我們將它們保存到D:"下。

    Step4:編譯這兩個Java源文件

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

    Step5:運(yùn)行Hello

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

    Step6:修改Hello.java

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

    錯誤的類文件: ."World.java

    文件不包含類 World

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

            World world = new World();

            ^

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

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

    問題:

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

    回答

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

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

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

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

    posted on 2007-11-27 13:52 smart 閱讀(413) 評論(1)  編輯  收藏

    Feedback

    # re: 關(guān)于Java包導(dǎo)入的一個奇怪問題(轉(zhuǎn)貼至 孫鑫) 2007-11-27 21:57 隔葉黃鶯

    長見識,但未必長知識。  回復(fù)  更多評論   



    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 污网站免费在线观看| 51精品视频免费国产专区| 四色在线精品免费观看| 亚洲国产美女福利直播秀一区二区 | 欧洲精品成人免费视频在线观看 | 国产精品亚洲а∨天堂2021| 国产精品另类激情久久久免费| 亚洲永久网址在线观看| 性感美女视频免费网站午夜| 亚洲av色香蕉一区二区三区蜜桃| 国产成人精品免费视频软件| 美景之屋4在线未删减免费 | 亚洲AV男人的天堂在线观看| 成人毛片18女人毛片免费96| 亚洲国产专区一区| 美女巨胸喷奶水视频www免费| 国产亚洲av人片在线观看| 国产成人AV片无码免费| 4444亚洲国产成人精品| 国产香蕉九九久久精品免费| 色九月亚洲综合网| 国产成人综合亚洲亚洲国产第一页| 久久久久国产精品免费免费不卡 | 四虎影永久在线高清免费| 特级毛片爽www免费版| 国产成人亚洲精品青草天美| 亚洲成av人在线观看网站 | 国产99视频精品免费视频76| 亚洲AV日韩精品久久久久久| 人妖系列免费网站观看| 亚洲爆乳无码一区二区三区| 免费不卡视频一卡二卡| 麻豆一区二区三区蜜桃免费| 久久精品夜色国产亚洲av| 免费国产成人高清在线观看网站| 午夜在线亚洲男人午在线| 久久久久久亚洲精品中文字幕| 免费可以在线看A∨网站| 亚洲阿v天堂在线2017免费| 亚洲精品**中文毛片| 亚洲av麻豆aⅴ无码电影|