java面試題目答案_第1頁
java面試題目答案_第2頁
java面試題目答案_第3頁
java面試題目答案_第4頁
java面試題目答案_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1、面向?qū)ο蟮奶卣饔心男┓矫?.抽象:抽象就是忽略一個主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時(shí) 不用部分細(xì)節(jié)。抽象包括兩個方面,一是過程抽象,二是數(shù)據(jù)抽象。2.繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表 述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新 類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量, 并且類可 以修改或增加新的方法使之更適合特殊的需要。3.封裝:封裝是把過

2、程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。 面向?qū)ο?計(jì)算始丁這個基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、 封裝的對象, 這些對象通過一個受保護(hù)的接口訪問其他對象。4.多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和 包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的 解決了應(yīng)用程序函數(shù)同名問題。2、String是最基本的數(shù)據(jù)類型嗎?基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個

3、 類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類3、int和Integer有什么區(qū)別Java提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Java為每個原始類型 提供了封裝類。原始類型封裝類booleanBooleancharCharacterbyteByteshortShortintIntegerlongLong floatFloatdoubleDouble引用類型和原始類型的行為完全不同, 并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法, 它們包括:大小和速度問題,這種類型

4、以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲, 當(dāng)引用類型和原始類型用作某個類的實(shí)例數(shù)據(jù)時(shí)所指定的缺 省值。對象引用實(shí)例變量的缺省值為null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。4、String和StringBuffer的區(qū)別JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符申, 即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符申。而這個StringBuffer類提供的字符申進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。5、 運(yùn)行時(shí)異常與一般異常有何異同

5、?異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯誤。java編譯器要求方法必須聲明 拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異 常。6、 說出ArrayList,Vector, LinkedList的存儲性能和特性ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素?cái)?shù)大丁實(shí)際存儲 的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由丁使用了synchronized方法(線程安全),通常性能上較Array

6、List差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù) 據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。7、Collection和Collections的區(qū)別。Collection是集合類的上級接口,繼承與他的接口主要有Set和List.Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對各種集 合的搜索、排序、線程安全化等操作。8、 翳日&勺區(qū)別。&是位運(yùn)算符,表示按位與運(yùn)算,&跳邏輯運(yùn)算符,表示邏輯與(and)。9、HashMafft Hashtable的區(qū)別。HashMap是Hashtabl

7、e的輕量級實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在丁HashMap許空(null )鍵值(key) ,由丁非線程安全,效率上可能高丁Hashtable。HashMap許將null作為一個entry的key或者value,而Hashtable不允許。HashMa甘巴Hashtable的contains方法去掉了, 改成containsvalue和containsKey。 因?yàn)閏ontains方法容易讓人引起誤解。Hashtable繼承自Dictionary類,而HashMa* Java1.2引進(jìn)的Mapinterface的一個實(shí)現(xiàn)。最大的不同是,Hashtable的方法是Sy

8、nchronize的, 而HashMap是, 在多個 線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須 為之提供外同步。Hashtable和HashMap用的hash/rehash算法都大概一樣,所以性能不會有很 大的差異。10、final, finally, finalize的區(qū)別。final用丁聲明屆性,方法和類,分別表示屆性不可變,方法不可覆蓋,類 不可繼承。finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize是Object類的一個方法, 在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象 的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例

9、如關(guān)閉文件等。11、sleep()和wait()有什么區(qū)別?sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行 機(jī)會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會自動恢復(fù)。調(diào)用sleep不會 釋放對象鎖。wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn) 入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll )后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運(yùn)行狀態(tài)。12、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類 型?方法的重寫Overriding和重載Overload

10、ing是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類 中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù), 我們說該方法被重寫(Overriding)。子類的對象使用這個方法時(shí),將調(diào)用子類 中的定義,對它而言,父類中的定義如同被屏蔽”了。如果在一個類中定義了多 個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。13、error和exception有什么區(qū)別?error表示恢復(fù)不是不可能但很困難的情況下的一

11、種嚴(yán)重問題。比如說內(nèi)存溢 出。不可能指望程序能處理這樣的情況。exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會發(fā)生的情況。14、 同步和異步有何異同,在什么情況下分別使用他們?舉例說明。如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個線程讀到, 或者 正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了, 那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須 進(jìn)行同步存取。當(dāng)應(yīng)用程序在對象上調(diào)用了一個需要花費(fèi)很長時(shí)間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下米用異步途徑往往 更有效率。15、heap和stack有什么區(qū)別。棧是一種線形集合,其添加和刪

12、除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出 的方式進(jìn)行處理。堆是棧的一個組成元素16、Static Nested Class和Inner Class的不同。Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴丁外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。17、GC什么?為什么要有GC?GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出 現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC能可以自動監(jiān)測對象是否超過作用域從而達(dá)到自動回收內(nèi)存的 目的,Java語言沒有提

13、供釋放已分配內(nèi)存的顯示操作方法。18、short s1 = 1; s1 = s1 + 1;有什么錯?short s1 = 1; s1 += 1;有什么錯?short s1 = 1; s1 = s1 + 1;(s1+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)short s1 = 1; s1 += 1;(可以正確編譯)19、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?Math.round(11.5)=12Math.round(-11.5)=-11round方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor.20、String s = new Stri

14、ng(xyz);創(chuàng)建了幾個String Object?兩個21、 設(shè)計(jì)4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序。以下程序使用內(nèi)部類實(shí)現(xiàn)線程,對j增減的時(shí)候沒有考慮順序問題。public class ThreadTest1private int j;public static void main(String args)ThreadTest1 tt=new ThreadTest1();Inc inc=tt.new Inc();Dec dec=tt.new Dec();for(int i=0;i2;i+)Thread t=new Thread(inc);t.sta

15、rt();t=new Thread(dec);t.start();private synchronized void inc()j+;System.out.println(Thread.currentThread().getName()+-inc:+j);private synchronized void dec()j-;System.out.println(Thread.currentThread().getName()+-dec:+j);class Inc implements Runnablepublic void run()for(int i=0;i100;i+)inc();class

16、 Dec implements Runnablepublic void run()for(int i=0;i100;i+)dec();22、Java有沒有g(shù)oto?java中的保留字,現(xiàn)在沒有在java中使用。30、啟動一個線程是用run()還是start()?啟動一個線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處丁可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個線程。23、 接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可 繼承實(shí)體類(concrete class)?接口可以繼承

17、接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體 類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。24、List, Set, Map是否繼承自Collection接口?List, Set是,Map不是25、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?都不能26、 數(shù)組有沒有l(wèi)ength()這個方法?String有沒有l(wèi)ength()這個方法?數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength的屆性。String有有l(wèi)ength()這個方法。27、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?是

18、用=還是equals。?它們有何區(qū)別?Set里的元素是不能重復(fù)的,那么用iterator()方法來區(qū)分重復(fù)與否。equals()l判 讀兩個Set是否相等。equals(0 =方法決定引用值是否指向同一對象equals(折類中被覆蓋,為的是 當(dāng)兩個分離的對象的內(nèi)容和類型相配的話,返回真值。28、 構(gòu)造器Constructor是否可被override?構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding ,但可以被重載Overloading。29、 是否可以繼承String類?String類是final類故不可以繼承。30、swtich是否能作用在byte上,是否能作用在lo

19、ng上,是否能作用在String上?switch (expr1)中,expr1是一個整數(shù)表達(dá)式。因此傳遞給switch和case語句 的參數(shù)應(yīng)該是int、short、char或者byte。long,string都不能作用丁swtich。31、try&里有一個return語句,那么緊跟在這個try后的finally 里的code會不會被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?會執(zhí)行,在return前執(zhí)行。32、 編程題:用最有效率的方法算出2乘以8等於幾?2 throws和finally0一般情況下是用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會拋出(throws)一個異常,這時(shí)候你

20、 可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理。 用try來指定一塊預(yù)防所有異常的程序。緊跟在try程序后面,應(yīng)包含一個catch子句來指定你想要捕捉的異常的類型。throw語句用來明確地拋出一個異常。throws用來標(biāo)明一個成員函數(shù)可能拋出的各種異常。Finally為確保一段代碼不管發(fā)生什么異常都被執(zhí)行一段代碼??梢栽谝粋€成員函數(shù)調(diào)用的外面寫一個try語句,在這個成員函數(shù)內(nèi)部寫另一個try語句保護(hù)其他代碼。每當(dāng)遇到一個try語句,異常的框架就放到堆棧上面, 直到所有的try語句都完成。如果下一級的try語句沒有對某種”異常進(jìn)行處理, 堆棧就會展開,直到遇

21、到有處理這種異常的try語句。48、 一個.java源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制? 可以。必須只有一個類名與文件名相同。49、java中有幾種方法可以實(shí)現(xiàn)一個線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend(方法為何不推薦使用?有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口用synchronized關(guān)鍵字修飾同步方法反對使用stop(),是因?yàn)樗话踩?。它會解除由線程獲取的所有鎖定,而且如果 對象處丁一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend(方法容易發(fā)生死鎖。調(diào)用suspen

22、d()勺時(shí)候, 目標(biāo)線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被掛起的線程恢復(fù)運(yùn)行。對任何線程來說,如果它 們想恢復(fù)目標(biāo)線程,同時(shí)乂試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應(yīng)該使用suspend()而應(yīng)在自己的Thread類中置入一個標(biāo)志,指出線程應(yīng)該 活動還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo) 志指出線程應(yīng)當(dāng)恢復(fù),則用一個notify()重新啟動線程。50、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承, 請說出他們分別是哪些類?字節(jié)流,字符流。字節(jié)流繼承丁InputStream

23、 OutputStream字符流繼承丁InputStreamReaderOutputStreamWriter在java.io包中還有許多其他的流,主要 是為了提高性能和使用方便。51、java中會存在內(nèi)存泄漏嗎,請簡單描述。會。如:int i,i2; return (i-i2); /when i為足夠大的正數(shù),i2為足夠大的負(fù)數(shù)。結(jié) 果會造成溢位,導(dǎo)致錯誤。59、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中 多態(tài)性的一種表現(xiàn)。60、 垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦 法主動通知虛擬機(jī)進(jìn)行垃

溫馨提示

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

評論

0/150

提交評論