當前位置:才華齋>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。