- 1. JAVA開(kāi)發(fā)工具(集成圖形開(kāi)發(fā)環(huán)境和多線程調(diào)試器) V3...
- 2. 手機(jī)人人 (for Java校內(nèi)通手機(jī)客戶端) 官方安裝版
- 3. Java反編譯工具
- 4. 模擬器運(yùn)行需要JAVA虛擬機(jī)(手機(jī)軟件下載)
- 5. Seurat|基于Java的圖像處理工具 1.0.1
- 6. Sun Java SE Runtime Environment (JRE) for 6 Upda
- 7. Javascript混淆加密器1.2破解版
- 8. Sothink JavaScript Web Scroller (網(wǎng)頁(yè)卷動(dòng)條)V2....
- 9. eclipse java編譯器 中文免費(fèi)版
Java包導(dǎo)入機(jī)制的研究與解析
java中有兩種包的導(dǎo)入機(jī)制,總結(jié)如下:
單類型導(dǎo)入(single-type-import),例如import java.io.File;
按需類型導(dǎo)入(type-import-on-demand),例如 import java.io.*;
關(guān)于這兩種導(dǎo)入類型大家各有所愛(ài),眾說(shuō)紛紜。這里分析一下這兩種導(dǎo)入類型的大致工作原理供大家參考。
單類型導(dǎo)入比較好理解,僅僅導(dǎo)入一個(gè)public類或者接口。而對(duì)于按需類型導(dǎo)入,有人誤解為導(dǎo)入一個(gè)包下的所有類,其實(shí)不然,看名字就知道,他只會(huì)按需導(dǎo)入,也就是說(shuō)它并非導(dǎo)入整個(gè)包,而僅僅導(dǎo)入當(dāng)前類需要使用的類。
既然如此是不是就可以放心的使用按需類型導(dǎo)入呢?非也,非也。因?yàn)閱晤愋蛯?dǎo)入和按需類型導(dǎo)入對(duì)類文件的定位算法是不一樣的。java編譯器會(huì)從啟動(dòng)目錄(bootstrap),擴(kuò)展目錄(extension)和用戶類路徑下去定位需要導(dǎo)入的類,而這些目錄進(jìn)僅僅是給出了類的頂層目錄。編譯器的類文件定位方法大致可以理解為如下公式:
頂層路徑名 \ 包名 \ 文件名.class = 絕對(duì)路徑
對(duì)于單類型導(dǎo)入很簡(jiǎn)單,因?yàn)榘骱臀募家呀?jīng)確定,所以可以一次性查找定位。
對(duì)于按需類型導(dǎo)入則比較復(fù)雜,編譯器會(huì)把包名和文件名進(jìn)行排列組合,然后對(duì)所有的可能性進(jìn)行類文件查找定位。例如:
package com;
import java.io.*;
import java.util.*;
當(dāng)你的類文件中用到了File類,那么可能出現(xiàn)File類的地方如下
File \\ File類屬于無(wú)名包,就是說(shuō)File類沒(méi)有package語(yǔ)句,編譯器會(huì)首先搜索無(wú)名包
com.File \\ File類屬于當(dāng)前包
java.lang.File \\編譯器會(huì)自動(dòng)導(dǎo)入java.lang包
java.io.File
java.util.File
需要注意的地方就是,編譯器找到j(luò)ava.io.File類之后并不會(huì)停止下一步的尋找,而要把所有的可能性都查找完以確定是否有類導(dǎo)入沖突。假設(shè)此時(shí)的頂層路徑有三個(gè),那么編譯器就會(huì)進(jìn)行3*5=15次查找。
注意:如果在查找完成后,編譯器發(fā)現(xiàn)了兩個(gè)同名的類,那么就會(huì)報(bào)錯(cuò)。要?jiǎng)h除你不用的那個(gè)類,然后再編譯。
了解以上原理之后,我們可以得出這樣的結(jié)論:按需類型導(dǎo)入是絕對(duì)不會(huì)降低Java代碼的執(zhí)行效率的,但會(huì)影響到Java代碼的編譯速度。
查看JDK的源代碼就知道SUN的軟件工程師一般不會(huì)使用按需類型導(dǎo)入。因?yàn)槭褂脝晤愋蛯?dǎo)入至少有以下兩點(diǎn)好處:
1。提高編譯速度。
2。避免命名沖突。(例如:當(dāng)你import java.awt.*;import java.util.*后,使用List的時(shí)候編譯器將會(huì)出編譯錯(cuò)誤)
當(dāng)然,使用單類型導(dǎo)入會(huì)使用你的import語(yǔ)句看起來(lái)很長(zhǎng)。
- 1. 多線程開(kāi)發(fā)的捷徑:構(gòu)建Java并發(fā)模型框架
- 2. Java包導(dǎo)入機(jī)制的研究與解析
- 3. JAVA中的main函數(shù)詳細(xì)講解
- 4. Java繼承和接口的區(qū)別
- 5. Java Eclipse反編譯配置
- 6. Java schedule與scheduleAtFixRate區(qū)別
- 7. Java控制臺(tái)打印九九乘法表
- 8. 通過(guò)JNI實(shí)現(xiàn)Java和C++的相互調(diào)用
- 9. Java中Json格式數(shù)據(jù)的應(yīng)用
- 10. Java回調(diào)函數(shù)