国产美女一级毛片精品久久久|婷婷影院在线综合免费视频|最新国产午夜精品视频成人|久久精品九九无码免费

Java兩種導(dǎo)入包的機(jī)制解析

來(lái)源:北大青鳥(niǎo)飛迅校區(qū)|發(fā)布時(shí)間:2013-04-27 17:48:46

  java中有兩種包的導(dǎo)入機(jī)制,總結(jié)如下:

  單類(lèi)型導(dǎo)入(single-type-import),例如import java.io.File;

  按需類(lèi)型導(dǎo)入(type-import-on-demand),例如import java.io.*;

  關(guān)于這兩種導(dǎo)入類(lèi)型大家各有所愛(ài),眾說(shuō)紛紜。這里分析一下這兩種導(dǎo)入類(lèi)型的大致工作原理供大家參考。

  單類(lèi)型導(dǎo)入比較好理解,僅僅導(dǎo)入一個(gè)public類(lèi)或者接口。而對(duì)于按需類(lèi)型導(dǎo)入,有人誤解為導(dǎo)入一個(gè)包下的所有類(lèi),其實(shí)不然,看名字就知道,他只會(huì)按需導(dǎo)入,也就是說(shuō)它并非導(dǎo)入整個(gè)包,而僅僅導(dǎo)入當(dāng)前類(lèi)需要使用的類(lèi)。

  既然如此是不是就可以放心的使用按需類(lèi)型導(dǎo)入呢?非也,非也。因?yàn)閱晤?lèi)型導(dǎo)入和按需類(lèi)型導(dǎo)入對(duì)類(lèi)文件的定位算法是不一樣的。java編譯器會(huì)從啟動(dòng)目錄(bootstrap),擴(kuò)展目錄(extension)和用戶類(lèi)路徑下去定位需要導(dǎo)入的類(lèi),而這些目錄進(jìn)僅僅是給出了類(lèi)的頂層目錄。編譯器的類(lèi)文件定位方法大致可以理解為如下公式:

  頂層路徑名 包名 文件名.class = 絕對(duì)路徑

  對(duì)于單類(lèi)型導(dǎo)入很簡(jiǎn)單,因?yàn)榘骱臀募家呀?jīng)確定,所以可以一次性查找定位。

  對(duì)于按需類(lèi)型導(dǎo)入則比較復(fù)雜,編譯器會(huì)把包名和文件名進(jìn)行排列組合,然后對(duì)所有的可能性進(jìn)行類(lèi)文件查找定位。例如:

  package com;

  import java.io.*;

  import java.util.*;

  當(dāng)你的類(lèi)文件中用到了File類(lèi),那么可能出現(xiàn)File類(lèi)的地方如下

  File File類(lèi)屬于無(wú)名包,就是說(shuō)File類(lèi)沒(méi)有package語(yǔ)句,編譯器會(huì)首先搜索無(wú)名包

  com.File File類(lèi)屬于當(dāng)前包

  java.lang.File 編譯器會(huì)自動(dòng)導(dǎo)入java.lang包

  java.io.File

  java.util.File

  需要注意的地方就是,編譯器找到j(luò)ava.io.File類(lèi)之后并不會(huì)停止下一步的尋找,而要把所有的可能性都查找完以確定是否有類(lèi)導(dǎo)入沖突。假設(shè)此時(shí)的頂層路徑有三個(gè),那么編譯器就會(huì)進(jìn)行3*5=15次查找。

  注意:如果在查找完成后,編譯器發(fā)現(xiàn)了兩個(gè)同名的類(lèi),那么就會(huì)報(bào)錯(cuò)。要?jiǎng)h除你不用的那個(gè)類(lèi),然后再編譯。

  了解以上原理之后,我們可以得出這樣的結(jié)論:按需類(lèi)型導(dǎo)入是絕對(duì)不會(huì)降低Java代碼的執(zhí)行效率的,但會(huì)影響到Java代碼的編譯速度。

  查看JDK的源代碼就知道SUN的軟件工程師一般不會(huì)使用按需類(lèi)型導(dǎo)入。因?yàn)槭褂脝晤?lèi)型導(dǎo)入至少有以下兩點(diǎn)好處:

  1。提高編譯速度。

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

  當(dāng)然,使用單類(lèi)型導(dǎo)入會(huì)使用你的import語(yǔ)句看起來(lái)很長(zhǎng)。

關(guān)于這兩種導(dǎo)入類(lèi)型大家各有所愛(ài),眾說(shuō)紛紜。這里分析一下這兩種導(dǎo)入類(lèi)型的大致工作原理供大家參考。

  java中有兩種包的導(dǎo)入機(jī)制,總結(jié)如下:

  單類(lèi)型導(dǎo)入(single-type-import),例如import java.io.File;

  按需類(lèi)型導(dǎo)入(type-import-on-demand),例如import java.io.*;

上一篇:編碼漏洞:C、C++ 和Java的安全編碼?
下一篇:Java中的堆和棧的區(qū)別及運(yùn)用?

熱門(mén)話題

招生熱線: 4008-0731-86 / 0731-82186801

學(xué)校地址: 長(zhǎng)沙市天心區(qū)團(tuán)結(jié)路6號(hào)

Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有

湘ICP備14017520號(hào)-3

關(guān)注我們
在線咨詢
嘿,我來(lái)幫您!