版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)火安全課件
- 醫(yī)院反腐倡廉廉潔行醫(yī)專題黨課宣講課件
- 《超市盤(pán)點(diǎn)操作流程》課件
- 贛南科技學(xué)院《現(xiàn)代企業(yè)管理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 應(yīng)急照明系統(tǒng)培訓(xùn)課件
- 大學(xué)生安全教育(共31張課件)-2024鮮版
- 七年級(jí)語(yǔ)文上冊(cè)第二單元體驗(yàn)親情8世說(shuō)新語(yǔ)二則高效教案新人教版
- 2022年-2023年公務(wù)員(國(guó)考)之公共基礎(chǔ)知識(shí)模考模擬試題
- 氣胸護(hù)理查房
- 慶元旦表演安全課件
- 家長(zhǎng)會(huì)課件:小學(xué)寒假家長(zhǎng)會(huì)課件
- 變剛度單孔手術(shù)機(jī)器人系統(tǒng)設(shè)計(jì)方法及主從控制策略
- 兒童室外游戲機(jī)創(chuàng)業(yè)計(jì)劃書(shū)
- 2024年浙江寧波永耀供電服務(wù)有限公司招聘筆試參考題庫(kù)含答案解析
- 溫州食堂承包策劃方案
- 40篇英語(yǔ)短文搞定高考3500個(gè)單詞(全部)
- 《社會(huì)工作的理論》課件
- 2021電力建設(shè)項(xiàng)目工程總承包管理規(guī)范
- 2024年茂名市高三第一次綜合測(cè)試(一模)化學(xué)試卷(含答案)
- (常州卷)江蘇省常州市2023-2024學(xué)年五年級(jí)上學(xué)期期末考試質(zhì)量調(diào)研數(shù)學(xué)試卷一(蘇教版)
- 教練式溝通培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論