面試題corejava1.Java中的異常處理機(jī)制簡(jiǎn)單原理和應(yīng)用_第1頁(yè)
面試題corejava1.Java中的異常處理機(jī)制簡(jiǎn)單原理和應(yīng)用_第2頁(yè)
面試題corejava1.Java中的異常處理機(jī)制簡(jiǎn)單原理和應(yīng)用_第3頁(yè)
面試題corejava1.Java中的異常處理機(jī)制簡(jiǎn)單原理和應(yīng)用_第4頁(yè)
面試題corejava1.Java中的異常處理機(jī)制簡(jiǎn)單原理和應(yīng)用_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、Java 經(jīng)典面試題1. Java 中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。當(dāng) Java 程序了 Java 的語(yǔ)義規(guī)則時(shí),Java 虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。語(yǔ)義規(guī)則包括 2 種情況。一種是 Java 類庫(kù)內(nèi)置的語(yǔ)義檢查。例如數(shù) 組下標(biāo)越界,會(huì)IndexOutOfBoundsException;null 的對(duì)象時(shí)會(huì)NullPoerException。另一種 情況就是Java 允許程序員擴(kuò)展這種語(yǔ)義檢查,程序員可以創(chuàng)建自己的異常,并在何時(shí)用 throw關(guān)鍵字異常。所有的異常都是 java.lang.Thowable 的子類。2. Java 的接口和 C+的虛類的相同和不同處。由于 Java

2、 不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩?,現(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口 有更高的靈活性,因?yàn)榻涌谥袥](méi)有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是 public sic,所有方法默認(rèn)情況下是 public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。3.回收的優(yōu)點(diǎn)和原理。并考慮 2 種回收機(jī)制。Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了回收機(jī)制,使 c+程序員最頭疼的內(nèi)存管理迎刃而解,它使得 Java 程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管 理。由于有個(gè)回收機(jī)制,Java 中的對(duì)象不再有“作用域

3、”的概念,只有對(duì)象的才有“作用域”?;厥湛梢杂行У姆乐箖?nèi)存,有效的使用可以使 用的內(nèi)存?;厥掌魍ǔJ亲鳛橐粋€(gè)單獨(dú)的低級(jí)別的或者長(zhǎng)時(shí)間沒(méi)有使用的對(duì)象進(jìn)行清除和的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)回收,程序員不能 實(shí)時(shí)的調(diào)用回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行回收?;厥諜C(jī)制有分代回收和標(biāo)記回收,增量回收。4.線程同步的方法。wait():使一個(gè)線程處于等待狀態(tài),并且所持有的對(duì)象的 lock。sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉 erruptedException 異常。notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切

4、地喚醒某一個(gè)等待狀態(tài)的線程,而是由 JVM 確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。5. Error 與Exception區(qū)別?Error 表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常,Exception 表示需要捕捉或者需要程序進(jìn)行處理的異常。6. 在 java 中一個(gè)類被為 final 類型,表示了什么意思?表示該類不能被繼承,是頂級(jí)類。7 heap 和 stack區(qū)別。棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的一個(gè)組成元素。8 談?wù)?final

5、, finally, finalize 的區(qū)別。final修飾符(關(guān)鍵字)如果一個(gè)類被能作為父類被繼承。因此一個(gè)類不能既被為 final,意味著它不能再派生出新的子類,不為 abstract 的,又被為final 的。將變量或方法為 final,可以保證它們?cè)谑褂弥胁槐桓淖?。被為final 的變量必須在時(shí)給中只能,不可修改。被為final 的方法也同樣只能使用,不定 初值,而在以后的能重載。finally異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。finalize方法名。Ja

6、va技術(shù)允許使用 finalize() 方法在收集器將對(duì)象從內(nèi)存中清除出去之前做必要的工作。這個(gè)方法是由收集器在確定這個(gè)對(duì)象沒(méi)有被時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他工作。finalize() 方法是在對(duì)象調(diào)用的。收集器刪除對(duì)象之前對(duì)這個(gè)9Anonymous Inner Class ( implements(實(shí)現(xiàn))erface(接口)?類) 是否可以extends(繼承)其它類,是否可以的類是沒(méi)有名字的類。不能extends(繼承) 其它類,但一個(gè)類可以作為一個(gè)接口,由另一個(gè)10Sic Ne

7、sted Class類實(shí)現(xiàn)。和 Inner Class 的不同Nested Class (一般是 C+的說(shuō)法),Inner Class (一般是 JAVA 的說(shuō)法)。Java類與 C+嵌套類最大的不同就在于是否有指向外部的上。注: 靜態(tài)類(Inner Class)意味著 1 創(chuàng)建一個(gè) sic類的對(duì)象,不需要一個(gè)外部類對(duì)象,2 不能從一個(gè) sic類的一個(gè)對(duì)象一個(gè)外部類對(duì)象11&和&的區(qū)別。&是位運(yùn)算符。&是邏輯運(yùn)算符。12HashMap 和 Hashtable 的區(qū)別。都屬于 Map 接口的類,實(shí)現(xiàn)了將惟一鍵到特定的值上。HashMap 類沒(méi)有分類或者排序。它允許一個(gè) null 鍵和多個(gè) nul

8、l 值。Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降?。Collection 和 Collections 的區(qū)別。Collection 是個(gè) java.util 下的接口,它是各種集合結(jié)構(gòu)的父接口。Collections 是個(gè) java.util 下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。什么時(shí)候用 assert。斷言是一個(gè)包含表達(dá)式的語(yǔ)句,在執(zhí)行這個(gè)語(yǔ)句時(shí)假定該表達(dá)式為 true。如果表達(dá)式計(jì)算為 false,那么系統(tǒng)會(huì)一個(gè) Assertionerror。它用于調(diào)試目的:assert(a 0); / thro

9、ws an Assertionerror if a = 0斷言可以有兩種形式:assert Expres assert Expres1 ;1 : Expres2 ;Expres Expres信息的 String1 應(yīng)該總是產(chǎn)生一個(gè)值。2 可以是得出一個(gè)值的任意表達(dá)式。這個(gè)值用于生成顯示消息。調(diào)試斷言在默認(rèn)情況下是禁用的。要在編譯時(shí)啟用斷言,需要使用 source 1.4 標(biāo)記:javac -source 1.4 Test.java要在運(yùn)行時(shí)啟用斷言,可使用 -enableassertions 或者 -ea 標(biāo)記。要在運(yùn)行時(shí)選擇禁用斷言,可使用 -da 或者 -disableassertions

10、 標(biāo)記。要系統(tǒng)類中啟用斷言,可使用 -esa 或者 -dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言??梢栽陬A(yù)計(jì)正常情況下不會(huì)到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過(guò),斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參 數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌?,公有方法都必須檢查其參數(shù)。不過(guò),既可以在公有方法中,也可以在非公有方法中利用斷言測(cè)試后置條件。另外,斷言不應(yīng)該以任何 方式改變程序的狀態(tài)。15 GC 是什么? 為什么要有 GC? (基礎(chǔ))。GC 是收集器。Java 程序員不用擔(dān)心內(nèi)存管理,因?yàn)槭占鲿?huì)自動(dòng)進(jìn)行管理。要請(qǐng)求收集,可以調(diào)用下面的方法之一:System.gc() Runti

11、me.getRuntime().gc()16 String s = new String(xyz);創(chuàng)建了幾個(gè) String Object?兩個(gè)對(duì)象,一個(gè)是“xyz”,一個(gè)是指向“xyz”的對(duì)象 s。17 Math.round(11.5)等於多少? Math.round(-11.5)等於多少?Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;18 short s1 = 1; s1 = s1 + 1;錯(cuò)? short s1 = 1; s1 += 1;錯(cuò)?型,不能顯式轉(zhuǎn)化為 short 型??尚辳hort s1 = 1; s1 = s1

12、 + 1;有錯(cuò),s1 是 short 型,s1+1 是改為 s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1 正確。19 sleep() 和 wait()區(qū)別? 搞線程的最愛(ài)sleep()方法是使線程停止一段時(shí)間的方法。在 sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒(méi)有被調(diào)度為放棄執(zhí)行,除非 (a)“醒來(lái)”的線程具有更高的優(yōu)先級(jí) (b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?。wait()是線程交互時(shí),如果線程對(duì)一個(gè)同步對(duì)象 x 發(fā)出一個(gè)wait()調(diào)用,該線程會(huì)暫停執(zhí)行,被調(diào)對(duì)象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)

13、間到。Java 有沒(méi)有g(shù)oto?Gotojava 中的保留字,現(xiàn)在沒(méi)有在 java 中使用。數(shù)組有沒(méi)有 length()這個(gè)方法? String 有沒(méi)有 length()這個(gè)方法?數(shù)組沒(méi)有 length()這個(gè)方法,有 length 的屬性。String 有有 length()這個(gè)方法。22 Overload 和 Override 的區(qū)別。Overloaded 的方法是否可以改變返回值的類型?方法的重寫 Overriding 和重載 Overloading 是 Java 多態(tài)性的不同表現(xiàn)。重寫 Overriding 是父類與子類之間多態(tài)性 的一種表現(xiàn),重載 Overloading 是一個(gè)類中多

14、態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),說(shuō)該方法被重寫 (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“”了。如果在一個(gè)類中定義了多個(gè)同名的方 法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded 的方法是可以改變返回值的類型。23 Set 里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢? 是用=還是e quals()? 它們有何區(qū)別?Set 里的元素是不能重復(fù)的,那么用 iterator()方法來(lái)區(qū)分重復(fù)與否。equals()是判讀兩個(gè) Set 是否

15、相等。 equals()和=方法決定值是否指向同一對(duì)象 equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話,返回真值。24 最常見(jiàn)到的 runtime exception。ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, D

16、OMException,EmptyStackException, IllegalArgumentException, IllegalMonitorSeException, IllegalPathSeException, IllegalSeException,ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPoerException, ProfileDataException, Provi

17、derException,RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException25 error 和 exception區(qū)別?error 表示恢復(fù)不是不可能但很指望程序能處理這樣的情況。exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。26 List, Set, Map 是否繼承自 Collection 接口?List

18、,Set 是Map 不是的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能27 abstract class 和erface區(qū)別?方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要?jiǎng)?chuàng)建一現(xiàn)某些基本行為的類,并為該類方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。接口( erface)是抽

19、象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的, 沒(méi)有一個(gè)有程序體。接口只可以定義 sic final 成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。 然后,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效??梢赞D(zhuǎn)換到 接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口。abstract 的 method 是否可同時(shí)是 sic,是否可同時(shí)是

20、native,是否可同時(shí)是 synchronized?都不能是 abstracts接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類(concrete class)?接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。啟動(dòng)一個(gè)線程是用 run()還是 start()?啟動(dòng)一個(gè)線程是調(diào)用 start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由 JVM 調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。31構(gòu)造器 Constr

21、uctor 是否可被 override?構(gòu)造器 Constructor 不能被繼承,因此不能重寫 Overriding,但可以被重載 Overloading。是否可以繼承String 類?String 類是final 類故不可以繼承。當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè) synchronized 方法后,其它線程是否可進(jìn)入此對(duì)象的其它3233方法?不能,一個(gè)對(duì)象的一個(gè) synchronized 方法只能由一個(gè)線程。33try 里有一個(gè)return 語(yǔ)句,那么緊跟在這個(gè) try 后的 finally 里的code 會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在 return 前還是后?會(huì)執(zhí)行,在 return 前執(zhí)行。34編程題: 用最有效率的方法算出 2 乘以 8 等於幾?2 3兩個(gè)對(duì)象值相同(x.equals(y) = true),但卻可有不同的 hash code,這句話對(duì)不對(duì)?不對(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)論