Java面試基礎(一)

1、面向對象的特徵有哪些方面:

A:抽象

B:繼承

C:封裝

D:多態

2、Java基本的數據類型:

Java基本數據類型包括:byte、short、int、long、float、double、boolean、char
String不是基本的數據類型,是對象。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。爲了提高效率節省空間,我們應該用StringBuffer類。

3、Java基本類型與引用類型的區別:

Java 提供兩種不同的類型:[b]引用類型[/b]和[b]原始類型[/b](或內置類型)。另外,Java 還爲每個原始類型提供了封裝類(Wrapper)。下面是java裏面的原始類型和對應的封裝類:
A: boolean-----Boolean
B: char--------Character
C: byte--------Byte
D: short-------Short
E: int---------Integer
F: long--------Long
G: float-------Float
H: double------Double
引用類型和原始類型的行爲完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。[b]對象引用實例變量的缺省值爲 null,而原始類型實例變量的缺省值與它們的類型有關[/b]。

4、String 和StringBuffer的區別:

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串可以修改。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffer來動態構造字符數據。
--------------------------------------------------------------------------------
String s;每次對s進行賦值操作是都將生成一個新的String實例;
StingBuffer sb;sb則不然,它始終是同一個實例;
所以在經常動態的改變字符串的值時用StingBuffer效率比較高,java生成一個實例的代價較大。

5、說出ArrayList,Vector, LinkedList的存儲性能和特性

1)ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢;
2)Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差;
3)LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

6、Collection 和 Collections的區別。

Collection是集合類的上級[b]接口[/b],繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個[b]幫助類[/b],他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

7、HashMap和Hashtable的區別。

1).HashTable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap這個區別就像Vector和ArrayList一樣。

2).HashTable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。

3).HashTable有一個contains(Object value),功能和containsValue(Object value)功能一樣。

4).HashTable使用Enumeration,HashMap使用Iterator。

5).HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。

6).哈希值的使用不同,HashTable直接使用對象的hashCode,代碼是這樣的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;

而HashMap重新計算hash值,而且用與代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);
static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}

8、final, finally, finalize的區別:

1)final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
2)finally是異常處理語句結構的一部分,表示總是執行。
3)finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。

9、String, StringBuffer StringBuilder 的區別。

1)String 的長度是不可變的;
2)StringBuffer 的長度是可變的,如果你對字符串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer 的toString()方法;線程安全;
3)StringBuilder是從JDK 5 開始,爲StringBuffer 該類補充了一個單個線程使用的等價類;通常應該優先使用StringBuilder 類,因爲它支持所有相同的操作,但由於它不執行同步,所以速度更快。

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

方法的重寫Overriding和重載Overloading是Java多態性的不同表現。[color=blue][b]重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現[/b][/color]。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章