當前位置:才華齋>IT認證>JAVA認證>

2016年JAVA面試題

JAVA認證 閱讀(1.23W)

Java面試題難嗎?下面yjbys小編就為大家分享最新的java面試題及答案,希望對大家有所幫助!

2016年JAVA面試題

1. 面向物件程式設計的三大特性是什麼,請簡要闡述

(1).繼承:

繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼 承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增 加新的方法使之更適合特殊的需要。

(2).封裝:

封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。

(3).多型性:

多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,很好的解決了應用程式函式同名問題。

2. String 和StringBuffer的區別

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料這個String類提供了數值不可改變字串而這個StringBuffer類提供的字串進行修改當你知道字元資料要改變的時候你就可以使用StringBuffer典型地,你可以使用StringBuffers來動態構造字元資料

3. 說出ArrayList,Vector, LinkedList的儲存效能和特性

ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized思路方法(執行緒安全) ,通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項前後項即可,所以插入速度較快

4. Collection 和 Collections的區別

Collection是集合類的上級介面,繼承與他的介面主要有Set 和List. Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作。

5. HashMap和Hashtable的區別

HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於HashtableJAVA中文站社群門戶oC)| g| ax ,HashMap允許將Null作為一個entryde key 或者value,而Hashtable不允許 HashMap把Hashtable的contains思路方法去掉了,改成containsvalue和containsKey因為contains思路方法容易讓人引起誤解Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

最大的區別是,Hashtable的思路方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的思路方法實現同步,而HashMap 就必須為的提供外同步。

Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。

6. final, finally, finalize的區別

final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

7. Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?

過載(Overload):

(1)方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。過載Overloading是一個類中多型性的一種表現。

(2)Java的方法過載,就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的引數和不同的定義。呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法, 這就是多型性。

(3)過載的時候,方法名要一樣,但是引數型別和個數不一樣,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準。

重寫(Override):

(1) 父類與子類之間的多型性,對父類的函式進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。

(2) 若子類中的方法與父類中的某一方法具有相同的方法名、返回型別和引數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。

(3)子類函式的.訪問修飾許可權不能少於父類的

重寫方法的規則:

1.引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.

2.返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載.

3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)

4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常.例如,

父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法是就不能丟擲Exception,只能丟擲IOException的子類異常,可以丟擲非檢查異常.

而過載的規則:

1.必須具有不同的引數列表;

2.可以有不同的返回型別,只要引數列表不同就可以了;

3.可以有不同的訪問修飾符;

4.可以丟擲不同的異常;

重寫和過載的區別在於:

重寫多型性起作用,對呼叫被過載過的方法可以大大減少程式碼的輸入量,同一個方法名只要往裡面傳遞不同的引數就可以擁有不同的功能或返回值.

用好重寫和過載可以設計一個結構清晰而簡潔的類,可以說重寫和過載在編寫程式碼過程中的作用非同一般.

Overloaded的方法是可以改變返回值的型別。

8. error和exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。

exception 表示一種設計或實現問題。也就是說,它表示如果程式執行正常,從不會發生的情況。

9. abstract class和interface有什麼區別?

ract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。

2.在abstract class 中可以有自己的資料成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的資料成員(也就是必須是static final的,不過在 interface中一般不定義資料成員),所有的成員方法都是abstract的。

ract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。

4.實現抽象類和介面的類必須實現其中的所有方法。抽象類中可以有非抽象方法。介面中則不能有實現方法。

5.介面中定義的變數預設是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。

6.抽象類中的變數預設是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

7.介面中的方法預設都是 public,abstract 型別的。

10. List, Set, Map是否繼承自Collection介面

List,Set是繼承自Collection,Map不是。

11. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

swtich中只能用byte short int char

12. char型變數中能不能存貯一箇中文漢字?為什麼?

能夠定義成為一箇中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一箇中文是沒問題的。

13. 多執行緒有幾種實現方法,都是什麼?哪一種方式比較優秀?同步有幾種實現方法,都是什麼?

多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面

實現Runnable介面比較好,因為實現類可以實現多個介面,而只能繼承一個類。

同步的實現方面有兩種,分別是synchronized,wait與notify

14. java中有幾種型別的流?JDK為每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類

位元組流,字元流。位元組流繼承與inputStream/outputStream,字元流繼承於inputStreamReader/outputSteamWriter。