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

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

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

    手機技術(shù)交流

    funabmol

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

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

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

    問題

    首先新建一個目錄存放Java源文件,或者直接在某個盤符下放置程序,例如:D:",然后按照下面的步驟進行實驗(本實驗在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:運行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ù)錯誤提示進行下列操作

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

    問題:

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

    回答

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

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

    1)將a目錄剪切到C:"下;
    2)再次執(zhí)行javac Hello.java,你會看到同樣的錯誤。也就是證實了在出錯之前,javac還沒有去查找a包中的類(對于包是否存在的驗證已經(jīng)進行)。
    3)執(zhí)行set classpath=c:"。由于你明確地設(shè)置了CLASSPATH環(huán)境變量的值,并且沒有包含點(.),因此javac不會再查找當前的目錄。
    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包導入的一個奇怪問題(轉(zhuǎn)貼至 孫鑫) 2007-11-27 21:57 隔葉黃鶯

    長見識,但未必長知識。  回復  更多評論   



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


    網(wǎng)站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久综合亚洲色hezyo| 亚洲男人的天堂一区二区| 亚洲一级毛片免费观看| 日本免费A级毛一片| 精品熟女少妇aⅴ免费久久| 免费人成网站永久| 乱淫片免费影院观看| 日本中文字幕免费看| 一区在线免费观看| 亚洲精品视频免费观看| 久久久久女教师免费一区| 两个人看的www免费视频| a级午夜毛片免费一区二区| 精品国产麻豆免费人成网站| 中文字幕无码一区二区免费| 免费无码毛片一区二区APP| 中文字幕在线观看免费视频| 国产在线观看麻豆91精品免费| 妻子5免费完整高清电视| 免费中文熟妇在线影片| 免费鲁丝片一级在线观看| 日本免费一区二区三区最新vr| 全部免费国产潢色一级| 亚洲日韩精品无码专区网站| 亚洲精品字幕在线观看| 亚洲色图在线观看| 亚洲一区欧洲一区| 国产精品国产亚洲区艳妇糸列短篇| 国产综合成人亚洲区| 国产成人精品免费大全| 久久国产精品2020免费m3u8| 亚洲免费观看在线视频| 日本大片在线看黄a∨免费| 中文字幕亚洲不卡在线亚瑟| 亚洲视频在线视频| 亚洲愉拍一区二区三区| 亚洲精品国产日韩无码AV永久免费网| 男人都懂www深夜免费网站| 免费大片黄在线观看yw| 免费A级毛片无码A| 亚洲VA中文字幕无码毛片|