騰訊 百度 聚美 Java面試題集總?cè)?八)_第1頁(yè)
騰訊 百度 聚美 Java面試題集總?cè)?八)_第2頁(yè)
騰訊 百度 聚美 Java面試題集總?cè)?八)_第3頁(yè)
騰訊 百度 聚美 Java面試題集總?cè)?八)_第4頁(yè)
騰訊 百度 聚美 Java面試題集總?cè)?八)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、46、try里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally里的代碼會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?答:會(huì)執(zhí)行,在方法返回調(diào)用者前執(zhí)行。 注意:在finally中改變返回值的做法是不好的,因?yàn)槿绻嬖趂inally代碼塊,try中的return語(yǔ)句不會(huì)立馬返回調(diào)用者,而是記錄下返回值待finally代碼塊執(zhí)行完畢之后再向調(diào)用者返回其值,然后如果在finally中修改了返回值,就會(huì)返回修改后的值。顯然,在finally中返回或者修改返回值會(huì)對(duì)程序造成很大的困擾,C#中直接用編譯錯(cuò)誤的方式來(lái)阻止程序員干這種齷齪的事情,Java中也可以通過(guò)提升編譯器的

2、語(yǔ)法檢查級(jí)別來(lái)產(chǎn)生警告或錯(cuò)誤,Eclipse中可以在如圖所示的地方進(jìn)行設(shè)置,強(qiáng)烈建議將此項(xiàng)設(shè)置為編譯錯(cuò)誤。  47、Java語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws、throw、try、catch、finally分別如何使用?答:Java通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類或其子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并可以對(duì)其進(jìn)行處理。Java的異常處理是通過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:try、catch、t

3、hrow、throws和finally。一般情況下是用try來(lái)執(zhí)行一段程序,如果系統(tǒng)會(huì)拋出(throw)一個(gè)異常對(duì)象,可以通過(guò)它的類型來(lái)捕獲(catch)它,或通過(guò)總是執(zhí)行代碼塊(finally)來(lái)處理;try用來(lái)指定一塊預(yù)防所有異常的程序;catch子句緊跟在try塊后面,用來(lái)指定你想要捕獲的異常的類型;throw語(yǔ)句用來(lái)明確地拋出一個(gè)異常;throws用來(lái)聲明一個(gè)方法可能拋出的各種異常(當(dāng)然聲明異常時(shí)允許無(wú)病呻吟);finally為確保一段代碼不管發(fā)生什么異常狀況都要被執(zhí)行;try語(yǔ)句可以嵌套,每當(dāng)遇到一個(gè)try語(yǔ)句,異常的結(jié)構(gòu)就會(huì)被放入異常棧中,直到所有的try語(yǔ)句都完成。如果下一級(jí)的t

4、ry語(yǔ)句沒(méi)有對(duì)某種異常進(jìn)行處理,異常棧就會(huì)執(zhí)行出棧操作,直到遇到有處理這種異常的try語(yǔ)句或者最終將異常拋給JVM。 48、運(yùn)行時(shí)異常與受檢異常有何異同?答:異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤,只要程序設(shè)計(jì)得沒(méi)有問(wèn)題通常就不會(huì)發(fā)生。受檢異常跟程序運(yùn)行的上下文環(huán)境有關(guān),即使程序設(shè)計(jì)無(wú)誤,仍然可能因使用的問(wèn)題而引發(fā)。Java編譯器要求方法必須聲明拋出可能發(fā)生的受檢異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。異常和繼承一樣,是面向?qū)ο蟪绦蛟O(shè)計(jì)中經(jīng)常被濫用的東西,在Effective Java中對(duì)異常的使用給

5、出了以下指導(dǎo)原則: - 不要將異常處理用于正常的控制流(設(shè)計(jì)良好的API不應(yīng)該強(qiáng)迫它的調(diào)用者為了正常的控制流而使用異常) - 對(duì)可以恢復(fù)的情況使用受檢異常,對(duì)編程錯(cuò)誤使用運(yùn)行時(shí)異常 - 避免不必要的使用受檢異常(可以通過(guò)一些狀態(tài)檢測(cè)手段來(lái)避免異常的發(fā)生)- 優(yōu)先使用標(biāo)準(zhǔn)的異常 - 每個(gè)方法拋出的異常都要有文檔 - 保持異常的原子性 - 不要在catch中忽略掉捕獲到的異常 49、列出一些你常見(jiàn)的運(yùn)行時(shí)異常? 答:- ArithmeticException(算術(shù)異常) - ClassCastExceptio

6、n (類轉(zhuǎn)換異常) - IllegalArgumentException (非法參數(shù)異常) - IndexOutOfBoundsException (下標(biāo)越界異常) - NullPointerException (空指針異常) - SecurityException (安全異常) 50、闡述final、finally、finalize的區(qū)別。 答: - final:修飾符(關(guān)鍵字)有三種用法:如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,即不能被繼承,因此它和abstract是反義詞。將變量聲明為final,可

7、以保證它們?cè)谑褂弥胁槐桓淖?,被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取不可修改。被聲明為final的方法也同樣只能使用,不能在子類中被重寫(xiě)。 - finally:通常放在try.catch.的后面構(gòu)造總是執(zhí)行代碼塊,這就意味著程序無(wú)論正常執(zhí)行還是發(fā)生異常,這里的代碼只要JVM不關(guān)閉都能執(zhí)行,可以將釋放外部資源的代碼寫(xiě)在finally塊中。 - finalize:Object類中定義的方法,Java中允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在銷毀對(duì)象時(shí)調(diào)用的,通過(guò)重寫(xiě)finali

8、ze()方法可以整理系統(tǒng)資源或者執(zhí)行其他清理工作。 51、類ExampleA繼承Exception,類ExampleB繼承ExampleA。 有如下代碼片斷: try    throw new ExampleB("b") catch(ExampleA e)    System.out.println("ExampleA"); catch(Exception e)    System.out.println("Exception"); 請(qǐng)

9、問(wèn)執(zhí)行此段代碼的輸出是什么?答:輸出:ExampleA。(根據(jù)里氏代換原則能使用父類型的地方一定能使用子類型,抓取ExampleA類型異常的catch塊能夠抓住try塊中拋出的ExampleB類型的異常) 面試題 - 說(shuō)出下面代碼的運(yùn)行結(jié)果。(此題的出處是Java編程思想一書(shū))class Annoyance extends Exception class Sneeze extends Annoyance class Human    public static void main(String args)        th

10、rows Exception        try            try                throw new Sneeze();                        catch ( Annoyance a )         &

11、#160;      System.out.println("Caught Annoyance");                throw a;                            catch ( Sneeze s )            Sys

12、tem.out.println("Caught Sneeze");            return ;                finally            System.out.println("Hello World!");             52、List、S

13、et、Map是否繼承自Collection接口?答:List、Set 是,Map 不是。Map是鍵值對(duì)映射容器,與List和Set有明顯的區(qū)別,而Set存儲(chǔ)的零散的元素且不允許有重復(fù)元素(數(shù)學(xué)中的集合也是如此),List是線性結(jié)構(gòu)的容器,適用于按數(shù)值索引訪問(wèn)元素的情形。 53、闡述ArrayList、Vector、LinkedList的存儲(chǔ)性能和特性。答:ArrayList 和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector中的方法由

14、于添加了synchronized修飾,因此Vector是線程安全的容器,但性能上較ArrayList差,因此已經(jīng)是Java中的遺留容器。LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ)(將內(nèi)存中零散的內(nèi)存單元通過(guò)附加的引用關(guān)聯(lián)起來(lái),形成一個(gè)可以按序號(hào)索引的線性結(jié)構(gòu),這種鏈?zhǔn)酱鎯?chǔ)方式與數(shù)組的連續(xù)存儲(chǔ)方式相比,內(nèi)存的利用率更高),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。Vector屬于遺留容器(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、Properties都是遺留容器),已經(jīng)不推薦

15、使用,但是由于ArrayList和LinkedListed都是非線程安全的,如果遇到多個(gè)線程操作同一個(gè)容器的場(chǎng)景,則可以通過(guò)工具類Collections中的synchronizedList方法將其轉(zhuǎn)換成線程安全的容器后再使用(這是對(duì)裝潢模式的應(yīng)用,將已有對(duì)象傳入另一個(gè)類的構(gòu)造器中創(chuàng)建新的對(duì)象來(lái)增強(qiáng)實(shí)現(xiàn))。 補(bǔ)充:遺留容器中的Properties類和Stack類在設(shè)計(jì)上有嚴(yán)重的問(wèn)題,Properties是一個(gè)鍵和值都是字符串的特殊的鍵值對(duì)映射,在設(shè)計(jì)上應(yīng)該是關(guān)聯(lián)一個(gè)Hashtable并將其兩個(gè)泛型參數(shù)設(shè)置為String類型,但是Java API中的Properties直接繼承了Hashtable,這很明顯是對(duì)繼承的濫用。這里復(fù)用代碼的方式應(yīng)該是Has-A關(guān)系而不是Is-A關(guān)系,另一方面容器都屬于工具類,繼承工具類本身就是一個(gè)錯(cuò)誤的做法,使用工具類最好的方式是Has-A關(guān)系(關(guān)聯(lián))或Use-A關(guān)系(依賴)。同理,Stack類繼承Vector也是不正確的。Sun公司的工程師們也會(huì)犯這種低級(jí)錯(cuò)誤,讓人唏噓不已。 54、Collection和Collections的區(qū)別?答:Collection是一個(gè)接口,它是Set、List等容器的父接口;Collections是個(gè)一個(gè)工具類,提供了一系列的靜態(tài)方法來(lái)輔助容器操作,這些方法包括對(duì)容器的搜索、排序、線程安全

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論