The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          程序員可以使用兩種import語句:

            單類型導入(single-type-import),例如import java.io.File;

            按需類型導入(type-import-on-demand),例如 import java.io.*;

            關于這兩種導入類型大家各有所愛,眾說紛紜。這里分析一下這兩種導入類型的大致工作原理供大家參考。

            單類型導入比較好理解,僅僅導入一個public類或者接口。而對于按需類型導入,有人誤解為導入一個包下的所有類,其實不然,看名字就知道,他只會按需導入,也就是說它并非導入整個包,而僅僅導入當前類需要使用的類。

            既然如此是不是就可以放心的使用按需類型導入呢?非也,非也。因為單類型導入和按需類型導入對類文件的定位算法是不一樣的。

            java編譯器會從啟動目錄(bootstrap),擴展目錄(extension)和用戶類路徑下去定位需要導入的類,而這些目錄僅僅是給出了類的頂層目錄。編譯器的類文件定位方法大致可以理解為如下公式:

            頂層路徑名 \ 包名 \ 文件名.class = 絕對路徑

            對于單類型導入很簡單,因為包明和文件名都已經確定,所以可以一次性查找定位。

            對于按需類型導入則比較復雜,編譯器會把包名和文件名進行排列組合,然后對所有的可能性進行類文件查找定位。例如:

            package com;

            import java.io.*;

            import java.util.*;

            當你的類文件中用到了File類,那么可能出現File類的地方如下:

            1、File \ File類屬于無名包,就是說File類沒有package語句,編譯器會首先搜索無名包

            2、com.File \ File類屬于當前包

            3、java.lang.File \編譯器會自動導入java.lang包

            4、java.io.File

            5、java.util.File

            需要注意的地方就是,編譯器找到java.io.File類之后并不會停止下一步的尋找,而要把所有的可能性都查找完以確定是否有類導入沖突。假設此時的頂層路徑有三個,那么編譯器就會進行3*5=15次查找。

            了解以上原理之后,我們可以得出這樣的結論:按需類型導入是絕對不會降低Java代碼的執行效率的,但會影響到Java代碼的編譯速度。

            查看JDK的源代碼就知道SUN的軟件工程師一般不會使用按需類型導入。因為使用單類型導入至少有以下兩點好處:

            1。提高編譯速度。

            2。避免命名沖突。(例如:當你import java.awt.*;import java.util.*后,使用List的時候編譯器將會出編譯錯誤)

            當然,使用單類型導入會使用你的import語句看起來很長。

          posted on 2014-01-03 10:25 Eric_jiang 閱讀(184) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 中牟县| 山东省| 长春市| 琼结县| 榆林市| 慈利县| 石楼县| 唐河县| 浠水县| 琼结县| 旅游| 雷州市| 女性| 静海县| 梅河口市| 柘荣县| 长葛市| 宜君县| 白河县| 玛纳斯县| 柞水县| 屯昌县| 闽侯县| 沛县| 奎屯市| 天门市| 灵丘县| 兴义市| 辉南县| 康定县| 肥东县| 习水县| 漳州市| 楚雄市| 新巴尔虎右旗| 海门市| 合水县| 高尔夫| 交口县| 河南省| 光山县|