Java 初級(jí)面試題及答案_第1頁
Java 初級(jí)面試題及答案_第2頁
Java 初級(jí)面試題及答案_第3頁
Java 初級(jí)面試題及答案_第4頁
Java 初級(jí)面試題及答案_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java 初級(jí)面試題及答案1、Java中的重載與重寫有什么區(qū)別重載(Overload )是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段,實(shí)質(zhì)表現(xiàn) 就是多個(gè)具有不同的參數(shù)個(gè)數(shù)或者類型的同名函數(shù)(返回值類型可隨意,不能以 返回類型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn))同時(shí)存在于同一個(gè)類中,是一個(gè)類中多態(tài)性 的一種表現(xiàn)(調(diào)用方法時(shí)通過傳遞不同參數(shù)個(gè)數(shù)和參數(shù)類型來決定具體使用哪個(gè) 方法的多態(tài)性)。重寫(Override)是父類與子類之間的多態(tài)性,實(shí)質(zhì)是對(duì)父類的函數(shù)進(jìn)行重新定 義,如果在子類中定義某方法與其父類有相同的名稱和參數(shù)則該方法被重寫,不 過子類函數(shù)的訪問修飾權(quán)限不能小于父類的;若子類中的方法與父類中的某一方

2、法具有相同的方法名、返回類型和參數(shù)表,則新方法將覆蓋原有的方法,如需父 類中原有的方法則可使用 super 關(guān)鍵字。重載:必須具有不同的參數(shù)列表;可以有不同的返回類型;可以有不同的訪問修飾符;可以拋出不同的異常。重寫:參數(shù)列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載;返回類型必須一直與被重寫的方法相同,否則不能稱其為重寫而是重載;訪問修飾符的限制一定要大于等于被重寫方法的訪問修飾符;重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉挿旱臋z查型 異常。重載與重寫是 Java 多態(tài)性的不同表現(xiàn),重寫是父類與子類之間多態(tài)性的表現(xiàn), 在運(yùn)行時(shí)起作用(動(dòng)態(tài)多態(tài)性,譬如實(shí)現(xiàn)動(dòng)態(tài)綁定)

3、,而重載是一個(gè)類中多態(tài)性 的表現(xiàn),在編譯時(shí)起作用(靜態(tài)多態(tài)性,譬如實(shí)現(xiàn)靜態(tài)綁定)。2、 Java 中 final、finally、finalize 的區(qū)別final 是一個(gè)修飾符,如果一個(gè)類被聲明為 final 則其不能再派生出新的子類,所 以一個(gè)類不能既被聲明為 abstract 又被聲明為 final 的;將變量或方法聲明為 final 可以保證它們?cè)谑褂弥胁槐桓淖?對(duì)于對(duì)象變量來說其引用不可變,即不 能再指向其他的對(duì)象,但是對(duì)象的值可變),被聲明為 final 的變量必須在聲明 時(shí)給定初值,而在以后的引用中只能讀取不可修改,被聲明為 final 的方法也同 樣只能使用不能重載。使用 fi

4、nal 關(guān)鍵字如果編譯器能夠在編譯階段確定某變量的值則編譯器就會(huì)把 該變量當(dāng)做編譯期常量來使用,如果需要在運(yùn)行時(shí)確定(譬如方法調(diào)用)則編譯 器就不會(huì)優(yōu)化相關(guān)代碼;將類、方法、變量聲明為 final 能夠提高性能,這樣 JVM 就有機(jī)會(huì)進(jìn)行估計(jì)并進(jìn)行優(yōu)化;接口中的變量都是 public static final 的。finally 用來在異常處理時(shí)提供塊來執(zhí)行任何清除操作,如果拋出一個(gè)異常,則相 匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊。finalize是一個(gè)方法名,ava允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存 中清除出去之前做必要的清理工作,這個(gè)

5、方法是由垃圾收集器在確定這個(gè)對(duì)象沒 有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的,它是在 Object 類中定義的,因此所有的類都繼 承了它,子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作, finalize() 方法在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。3、Java 中 hashCode() 的作用hashCode() 的作用是為了提高在散列結(jié)構(gòu)存儲(chǔ)中查找的效率,在線性表中沒有 作用;只有每個(gè)對(duì)象的 hash 碼盡可能不同才能保證散列的存取性能,事實(shí)上 Object 類提供的默認(rèn)實(shí)現(xiàn)確實(shí)保證每個(gè)對(duì)象的 hash 碼不同(在對(duì)象的內(nèi)存地址基礎(chǔ)上 經(jīng)過特定算法返回一個(gè) hash 碼)。

6、在Java有些集合類(HashSet)中要想保證元素不重復(fù)可以在每增加一個(gè)元素就 通過對(duì)象的 equals 方法比較一次,那么當(dāng)元素很多時(shí)后添加到集合中的元素比 較的次數(shù)就非常多了,會(huì)大大降低效率。于是 Java 采用了哈希表的原理,這樣當(dāng)集合要添加新的元素時(shí)會(huì)先調(diào)用這個(gè)元 素的 hashCode 方法就一下子能定位到它應(yīng)該放置的物理位置上(實(shí)際可能并不 是),如果這個(gè)位置上沒有元素則它就可以直接存儲(chǔ)在這個(gè)位置上而不用再進(jìn)行 任何比較了,如果這個(gè)位置上已經(jīng)有元素了則就調(diào)用它的 equals 方法與新元素 進(jìn)行比較,相同的話就不存,不相同就散列其它的地址,這樣一來實(shí)際調(diào)用 equals 方法的次

7、數(shù)就大大降低了,幾乎只需要一兩次,而 hashCode 的值對(duì)于 每個(gè)對(duì)象實(shí)例來說是一個(gè)固定值。4、抽象類(abstract class)和接口(inteface)有什么區(qū)別含有 abstract 修飾符的 class 為抽象類, abstract 類不能創(chuàng)建實(shí)例對(duì)象,含有 abstract 方法的類必須定義為 abstract class,abstract class 類中的方法不必是抽 象的。abstract class 類中定義的抽象方法必須在具體的子類中實(shí)現(xiàn),所以不能有抽象構(gòu) 造方法或抽象靜態(tài)方法,如果子類沒有實(shí)現(xiàn)抽象父類中的所有抽象方法則子類也 必須定義為 abstract 類型。對(duì)

8、于接口可以說是抽象類的一種特例,接口中的所有方法都必須是抽象的(接口 中的方法定義默認(rèn)為 public abstract 類型,接口中的成員變量類型默認(rèn)為 public static final)。具體的區(qū)別如下:抽象類可以有構(gòu)造方法;接口中不能有構(gòu)造方法。 抽象類中可以有普通成員變量或者常量或者靜態(tài)變量;接口中沒有普通成員變量 和靜態(tài)變量,只能是常量(默認(rèn)修飾符為 publci static final)。抽象類中可以包含非抽象的普通方法和抽象方法及靜態(tài)方法;接口中的所有方法 必須都是抽象的,不能有非抽象的普通方法和靜態(tài)方法(默認(rèn)修飾符為 public abstract)。抽象類中的抽象方法

9、訪問類型可以是 public、protected 的;接口中的抽象方法 只能是public的(默認(rèn)修飾符為public abstract)。一個(gè)子類可以實(shí)現(xiàn)多個(gè)接口, 但只能繼承一個(gè)抽象類。5、為什么 ArrayList 的增加或刪除操作相對(duì)來說效率比較低ArrayList 在小于擴(kuò)容容量的情況下其實(shí)增加操作效率是非常高的,在涉及擴(kuò)容的 情況下添加操作效率確實(shí)低,刪除操作需要移位拷貝,效率是低點(diǎn)。因?yàn)?ArrayList 中增加(擴(kuò)容)或者是刪除元素要調(diào)用 System.arrayCopy 這種效 率很低的方法進(jìn)行處理,所以如果遇到了數(shù)據(jù)量略大且需要頻繁插入或刪除的操 作效率就比較低了,具體可

10、查看 ArrayList 的 add 和 remove 方法實(shí)現(xiàn),但是 ArrayList 頻繁訪問元素的效率是非常高的,因此遇到類似場(chǎng)景我們應(yīng)該盡可能使 用 LinkedList 進(jìn)行替代效率會(huì)高一些。6、LinkedList 工作原理和實(shí)現(xiàn)LinkedList 是以雙向鏈表實(shí)現(xiàn),鏈表無容量限制(但是雙向鏈表本身需要消耗額 外的鏈表指針空間來操作),其內(nèi)部主要成員為 first 和 last 兩個(gè) Node 節(jié)點(diǎn), 在每次修改列表時(shí)用來指引當(dāng)前雙向鏈表的首尾部位。所以 LinkedList 不僅僅實(shí)現(xiàn)了 List 接口,還實(shí)現(xiàn)了 Deque 雙端隊(duì)列接口(該接 口是 Queue 隊(duì)列的子接口

11、),故 LinkedList 自動(dòng)具備雙端隊(duì)列的特性,當(dāng)我們 使用下標(biāo)方式調(diào)用列表的 get(index)、set(index, e) 方法時(shí)需要遍歷鏈表將指針移 動(dòng)到位進(jìn)行訪問(會(huì)判斷 index 是否大于鏈表長度的一半決定是首部遍歷還是 尾部遍歷,訪問的復(fù)雜度為0(N/2),無法像ArrayList那樣進(jìn)行隨機(jī)訪問。(如果i數(shù)組大小的一半,會(huì)從末尾移起),只有在鏈表兩頭的操作(譬如add()、 addFirst()、removeLast() 或用在 iterator() 上的 remove() 操作)才不需要進(jìn)行遍 歷尋找定位。具體感興趣可以去看下 LinkedList 的源碼。7、介紹

12、HashMap 的底層原理所以 HashMap 的數(shù)據(jù)結(jié)構(gòu)是數(shù)組和鏈表的結(jié)合,此外 HashMap 中 key 和 value 都允許為 null, key 為 null 的鍵值對(duì)永遠(yuǎn)都放在以 table0 為頭結(jié)點(diǎn)的 鏈表中。之所以 HashMap 這么設(shè)計(jì)的實(shí)質(zhì)是由于數(shù)組存儲(chǔ)區(qū)間是連續(xù)的,占用內(nèi)存嚴(yán) 重,故空間復(fù)雜度大,但二分查找時(shí)間復(fù)雜度小(0(1),所以尋址容易而插入 和刪除困難;而鏈表存儲(chǔ)區(qū)間離散,占用內(nèi)存比較寬松,故空間復(fù)雜度小,但時(shí) 間復(fù)雜度大(0(N),所以尋址困難而插入和刪除容易;所以就產(chǎn)生了一種新的數(shù)據(jù)結(jié)構(gòu)叫做哈希表,哈希表既滿足數(shù)據(jù)的查找方便,同 時(shí)不占用太多的內(nèi)容空間,

13、使用也十分方便,哈希表有多種不同的實(shí)現(xiàn)方法, HashMap 采用的是鏈表的數(shù)組實(shí)現(xiàn)方式。對(duì)于 JDK 1.8 開始 HashMap 實(shí)現(xiàn)原理變成了數(shù)組+鏈表+紅黑樹的結(jié)構(gòu),數(shù)組鏈 表部分基本不變,紅黑樹是為了解決哈希碰撞后鏈表索引效率的問題,所以在 JDK 1.8 中當(dāng)鏈表的節(jié)點(diǎn)大于 8 個(gè)時(shí)就會(huì)將鏈表變?yōu)榧t黑樹。區(qū)別是 JDK 1.8 以前碰撞節(jié)點(diǎn)會(huì)在鏈表頭部插入,而 JDK 1.8 開始碰撞節(jié)點(diǎn)會(huì)在 鏈表尾部插入,對(duì)于擴(kuò)容操作后的節(jié)點(diǎn)轉(zhuǎn)移 JDK 1.8 以前轉(zhuǎn)移前后鏈表順序會(huì)倒 置,而 JDK 1.8 中依然保持原序。8、Hashtable 與 HashMap 的區(qū)別Hashtable

14、 算是一個(gè)過時(shí)的集合類,因?yàn)?JDK1.5 中提供的 ConcurrentHashMap 是 HashTable 的替代品,其擴(kuò)展性比 HashTable 更好。由于 HashMap 和 Hashtable 都實(shí)現(xiàn)了 Map 接口,所以其主要的區(qū)別如下:HashMap 是非 synchronized 的,而 Hashtable 是 synchronized 的。HashMap 可以接受 null 的鍵和值,而 Hashtable 的 key 與 value 均不能為 null 值。HashMap 的迭代器 Iterator 是 fail-fast 機(jī)制的,而 Hashtable 的 Enume

15、rator 迭代器不是 fail-fast 機(jī)制的(歷史原因)。單線程情況下使用 HashMap 性能要比 Hashtable 好,因?yàn)?HashMap 是沒有同 步操作的。Hashtable 繼承自 Dictionary 類且實(shí)現(xiàn)了 Map 接口,而 HashMap 繼承自 AbstractMap 類且實(shí)現(xiàn)了 Map 接口。HashTable 的默認(rèn)容量為 11,而 HashMap 為 16(安卓中為 4)。Hashtable 不要求底層數(shù)組的容量一定是 2 的整數(shù)次冪,而 HashMap 則要求一 定為 2 的整數(shù)次冪。Hashtable 擴(kuò)容時(shí)將容量變?yōu)樵瓉淼?2 倍加 1,而 Hash

16、Map 擴(kuò)容時(shí)將容量變?yōu)?原來的 2 倍。Hashtable 有 contains 方法,而 HashMap 有 containsKey 和 containsValue 方 法。9、 java 類加載器的理解及加載機(jī)制通過 java 命令運(yùn)行 java 程序的步驟就是指定包含 main 方法的完整類名以及 一個(gè) classpath 類路徑,類路徑可以有多個(gè),對(duì)于直接的 class 文件路徑就是 class 文件的根目錄,對(duì)于 jar 包文件路徑是 jar 包的完整路徑,包含 jar 包名 字;java 運(yùn)行時(shí)會(huì)根據(jù)類的完全限定名尋找并加載,尋找的方式基本就是在系統(tǒng)類 和指定的路徑中尋找,如果是

17、 class 文件的根目錄則直接查看是否有對(duì)應(yīng)的子目 錄及文件,如果是 jar 包則首先在內(nèi)存中解壓文件,然后再查看是否有對(duì)應(yīng)的類;負(fù)責(zé)類加載的類就是 ClassLoader 類加載器,它的輸入是完全限定的類名,輸出 是 Class 對(duì)象, java 虛擬機(jī)中可以安裝多個(gè)類加載器,系統(tǒng)默認(rèn)主要有三個(gè)類 加載器,每個(gè)類負(fù)責(zé)加載特定位置的類,也可以自定義類加載器,自定義的加載 器必須繼承ClassLoader,如下:?jiǎn)?dòng)類加載器(Bootstrap ClassLoader):此加載器為虛擬機(jī)實(shí)現(xiàn)的一部分,不是 java 語言上層實(shí)現(xiàn)的,一般為 C+ 實(shí)現(xiàn),主要負(fù)責(zé)加載 java 基礎(chǔ)類(譬如 vJ

18、AVA_HOME/lib/rt.jar,常用的String、List等都位于此包下),啟動(dòng)類加載器 無法被 java 程序直接引用。擴(kuò) 展 類 加 載 器 (Extension ClassLoader) : 此 加 載 器 實(shí) 現(xiàn) 類 為 sun.misc.Launcher$ExtClassLoader , 負(fù)責(zé)加載 java 的一些擴(kuò)展類(一般為 vJAVA_HOME/lib/ext目錄下的jar包),開發(fā)者可直接使用。應(yīng) 用 程 序 類 加 載 器 (Application ClassLoader) : 此 加 載 器 實(shí) 現(xiàn) 類 為 sun .misc.Lau ncher$AppClas

19、sLoader,負(fù)責(zé)加載應(yīng)用程序的類,包括自己寫的和引 用的第三方類庫,即 classpath 類路徑中指定的類,開發(fā)者可直接使用,一個(gè)程 序運(yùn)行時(shí)會(huì)創(chuàng)建一個(gè)這個(gè)加載器,程序中用到加載器的地方如果沒有特殊指定一 般都是這個(gè)加載器,所以也被稱為 System 系統(tǒng)類加載器。這三個(gè)加載器具備父子委派關(guān)系(非繼承父子關(guān)系),在 java 中每個(gè)類都是由 某個(gè)類加載器的實(shí)體來載入的,所以在 Class 類的實(shí)體中都會(huì)有字段記錄載入它 的類加載器的實(shí)體(當(dāng)為null時(shí),其指Bootstrap ClassLoader),在java類加 載器中除了引導(dǎo)類加載器(既 Bootstrap ClassLoader

20、)。所有的類加載器都有一個(gè)父類加載器(因?yàn)樗麄儽旧碜约壕褪?java 類),子 ClassLoader 有一個(gè)變量 pare nt 指向父 ClassLoader,在子 ClassLoader 加載類 時(shí)一般會(huì)先通過父 ClassLoader 加載,所以在加載一個(gè) class 文件時(shí)首先會(huì)判斷 是否已經(jīng) 加載 過了, 加載過則 直接 返回 Class 對(duì)象(一個(gè) 類只 會(huì)被一個(gè) ClassLoader 加載一次)。沒加載過則先讓父 ClassLoader 去加載,如果加載成功返回得到的 Class 對(duì)象, 父 沒 有 加 載 成 功 則 嘗 試 自 己 加 載 , 自 己 加 載 不 成 功

21、則 拋 出 ClassNotFoundException, 整個(gè)加載流程就是雙親委派模型, 即優(yōu)先讓父 ClassLoader 加載;雙親委派可以從優(yōu)先級(jí)的策略上避免 Java 類庫被覆蓋的問 題。例如類 java.long.Object 存放在 rt.jar 中,無論哪個(gè)類加載器要加載這個(gè)類最終 都會(huì)委派給啟動(dòng)類加載器進(jìn)行加載,因此 Object 類在程序的各種類加載器環(huán)境 中都是同一個(gè)類,相反如果我們自己寫了一個(gè)類名為 java.long.Object 且放在了 程序的 classpath 中,那系統(tǒng)中將會(huì)出現(xiàn)多個(gè)不同的 Object 類, java 類型體系 中最基礎(chǔ)的行為也無法保證,所

22、以一般遵循雙親委派的加載器就不會(huì)存在這個(gè)問 題。類加載機(jī)制中的雙親委派模型只是一般情況下的機(jī)制,有些時(shí)候我們可以自定義 加載順序(不建議)就不用遵守雙親委派模型了,同時(shí)以 java 開頭的類也不能 被自定義類加載器加載,這是 java 安全機(jī)制保證的;ClassLoader 一般是系統(tǒng)提供的,不需要自己實(shí)現(xiàn),不過通過自定義 ClassLoader 可以實(shí)現(xiàn)一些靈活強(qiáng)大的功能,譬如熱部署(不重啟 Java 程序的情況下動(dòng)態(tài)替 換類實(shí)現(xiàn))、應(yīng)用的模塊化和隔離化(不同 ClassLoader 可以加載相同的類,但 是互相隔離互不影響, tomcat 就是利用這個(gè)特性管理多 web 應(yīng)用的)、靈活加

23、載等,通過自定義類加載器我們可以加載其它位置的類或jar,自定義類加載器 主要步驟為繼承 java.lang.ClassLoader 然后重寫父類的 findClass 方法。之所以一般只重寫這一個(gè)方法是因?yàn)?JDK 已經(jīng)在 loadClass 方法中幫我們實(shí)現(xiàn) 了 ClassLoader 搜索類的算法,當(dāng)在 loadClass 方法中搜索不到類時(shí) loadClass 方法會(huì)主動(dòng)調(diào)用 findClass 方法來搜索類,所以我們只需重寫該方法即可,如沒 有特殊的要求,一般不建議重寫 loadClass 搜索類的算法。JVM 在判定兩個(gè) Class 是否相同時(shí)不僅會(huì)判斷兩個(gè)類名是否相同而且會(huì)判斷是

24、 否由同一個(gè)類加載器實(shí)例加載的,只有兩者同時(shí)滿足的情況下 JVM 才認(rèn)為這兩 個(gè) Class 是相同的,就算兩個(gè) Class 是同一份 class 字節(jié)碼文件,如果被兩個(gè)不 同的 ClassLoader 實(shí)例所加載 JVM 也會(huì)認(rèn)為它們是兩個(gè)不同 Class。而對(duì)于 JVM 來說它們是兩個(gè)不同的實(shí)例對(duì)象,但它們確實(shí)是同一份字節(jié)碼文 件,當(dāng)試圖將這個(gè) Class 實(shí)例生成具體的對(duì)象進(jìn)行轉(zhuǎn)換時(shí)就會(huì)拋運(yùn)行時(shí)異常 java.lang.ClassCaseException 提示這是兩個(gè)不同的類型。此外一個(gè) ClassLoader 創(chuàng) 建時(shí)如果沒有指定 parent 則 parent 默認(rèn)就是 AppCl

25、assLoader。10、Java 中 sleep() 與 wait() 方法的區(qū)別sleep() 方法使當(dāng)前線程進(jìn)入停滯狀態(tài)(阻塞當(dāng)前線程),讓出 CUP 的使用,目 的是不讓當(dāng)前線程獨(dú)自霸占該進(jìn)程所獲的 CPU 資源。該方法是 Thread 類的靜 態(tài)方法,當(dāng)在一個(gè) synchronized 塊中調(diào)用 sleep() 方法時(shí),線程雖然休眠了,但 是其占用的鎖并沒有被釋放;當(dāng) sleep() 休眠時(shí)間期滿后,該線程不一定會(huì)立即 執(zhí)行,因?yàn)槠渌€程可能正在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非此線程具有 更高的優(yōu)先級(jí)。wait() 方法是 Object 類的,當(dāng)一個(gè)線程執(zhí)行到 wait() 方法時(shí)

26、就進(jìn)入到一個(gè)和該 對(duì)象相關(guān)的等待池中,同時(shí)釋放對(duì)象的鎖(對(duì)于 wait(long timeout) 方法來說是 暫時(shí)釋放鎖,因?yàn)槌瑫r(shí)時(shí)間到后還需要返還對(duì)象鎖),其他線程可以訪問。wait() 使用notify?;騨otifyAII()或者指定睡眠時(shí)間來喚醒當(dāng)前等待池中的線程wait() 必 須 放 在 synchronized 塊 中 使 用 , 否 則 會(huì) 在 運(yùn) 行 時(shí) 拋 出 IIIegaIMonitorStateException 異常。由此可以看出它們之間的區(qū)別如下:sIeep() 不釋放同步鎖, wait() 釋放同步鎖。sIeep(miIIiseconds) 可以用時(shí)間指定來使他

27、自動(dòng)醒過來,如果時(shí)間沒到則只能調(diào) 用interreput()方法來強(qiáng)行打斷(不建議,會(huì)拋出InterruptedException),而wait() 可以用 notify() 直接喚起。sIeep() 是 Thread 的靜態(tài)方法,而 wait() 是 Object 的方法。 wait()、notify()、notifyAII() 方法只能在同步控制方法或者同步控制塊里面使用, 而 sIeep() 方法可以在任何地方使用。11、對(duì) ClassLoader 的理解CIassLoader 的作用是根據(jù)一個(gè)指定的類名稱找到或者生成其對(duì)應(yīng)的字節(jié)代碼, 然后把字節(jié)碼轉(zhuǎn)換成一個(gè) Java 類(即 java

28、.Iang.CIass 實(shí)例),除此之外還負(fù)責(zé) 加載Java應(yīng)用所需的資源、Native lib庫等。Java 的類加載器大致可以分成系統(tǒng)類加載器和應(yīng)用開發(fā)自定義類加載器。系統(tǒng) 類加載器主要有如下幾個(gè):引導(dǎo)類加載器(bootstrap class loader):用來加載Java核心庫,是虛擬機(jī)中用 原生代碼實(shí)現(xiàn)的,沒有繼承自 ClassLoader。擴(kuò)展類加載器(extensions class loader):用來加載Java的擴(kuò)展庫,虛擬機(jī)的實(shí) 現(xiàn)會(huì)提供一個(gè)默認(rèn)的擴(kuò)展庫目錄,該類加載器在此目錄里面查找并加載 Java 類。系統(tǒng)類加載器(system class loader):用來加載應(yīng)用類路徑(CLASSPATH)下的 class , 一 般 來 說 Java 應(yīng) 用 的 類 都 是 由 它 來 完 成 加 載 的 , 可 以 通 過 ClassLoader.getSystemClassLoader() 來獲取它。除了引導(dǎo)類加載器之外,所有的其他類加載器都有一個(gè)父類加載器(可以通過ClassLoader 的 getParent() 方法得到)。系統(tǒng)類加載器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論