程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java包導入機制的研究

java包導入機制的研究

編輯:關於JAVA

Java中有兩種包的導入機制,總結如下:

  單類型導入(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類的地方如下

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

  com.File \\ File類屬於當前包

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

  Java.io.File

  Java.util.File

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

  注意:如果在查找完成後,編譯器發現了兩個同名的類,那麼就會報錯。要刪除你不用的那個類,然後再編譯。

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

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

  1。提高編譯速度。

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved