Java常見的面試題目___來著<Java面試寶典>
阿新 • • 發佈:2018-04-13
輕量 長度 很大的 null HA 垃圾 效率 類型 shm 1、 error和 exception有什麽區別?
error 表示恢復不是不可能但很困難的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。 也就是說, 它表示如果程序運行正常,從不會發生的情況。
2、 Java 中的異常處理機制的簡單原理和應用。
異常是指 java 程序運行時(非編譯)所發生的非正常情況或錯誤,
Java使用面向對象的方式來處理異常, 它把程序中發生的每個異常也都分別封
裝到一個對象來表示的,該對象中包含有異常的信息。
Java 對異常進行了分類,不同類型的異常分別用不同的 Java 類表示,所有異常的根類為
java.lang.Throwable, Throwable 下面又派生了兩個子類: Error 和 Exception, Error 表示應
用程序本身無法克服和恢復的一種嚴重問題,例如, 說內存溢出。
Exception 表示程序還能夠克服和恢復的問題,其中又分為系統異常和普
通異常, 系統異常是軟件本身缺陷所導致的問題, 也就是軟件開發人員考慮不周所導致的問
題, 軟件使用者無法克服和恢復這種問題, 但在這種問題下還可以讓軟件系統繼續運行或者
讓軟件死掉,例如,空指針異常. 普通異常是運行環境的變化或異常所導致的問題,
是用戶能夠克服的問題, 例如, 網絡斷線, 硬盤空間不夠, 發生這樣的異常後,程序不應該死掉。
java 為系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須 try..catch處
理或用throws 聲明繼續拋給上層調用方法處理, 所以普通異常也稱為 checked異常, 而系統
異常可以處理也可以不處理,所以,編譯器不強制用 try..catch處理或用 throws 聲明,所以
系統異常也稱為unchecked 異常。
3、請寫出你最常見到的 5 個 runtime exception。
ClassCastException,
ArithmeticException,
NullPointerException,
StringIndexOutOfBoundsException,
NegativeArraySizeException。
4、 String 和 StringBuffer的區別
共同點:都可以存儲和操作字符串。
不同點:
String類提供數值不可改變的字符串,String 實現了 equals 方法和hashCode方法。
StringBuffer類能動態構造字符數據,提供字符串進行修改,而StringBuffer沒有實現 equals方法和hashCode方法。
將StringBuffer對象存儲進Java集合類中時會出現問題。
5、數組有沒有 length()這個方法?String有沒有 length()這個方法?
數組沒有length()這個方法,有length的屬性。 String有有length()這個方法。
6、下面這條語句一共創建了多少個對象: Strings="a"+"b"+"c"+"d";
javac編譯可以對字符串常量直接相加的表達式進行優化,
不必要等到運行期去進行加法運算處理,而是在編譯時去掉其中的加號,
直接將其編譯成一個這些常量相連的結果。
題目中的s變量 相當於直接定義了一個”abcd”的字符串,
所以,上面的代碼應該只創建了一個String對象。
7、 ArrayList 和 Vector 的區別
答:
共同點:都實現了 List接口,都是有序集合。
不同點: ArrayList是線程序不安全的,Vector是線程安全的,,
如果只有一個線程會訪問到集合, 那最好是使用
ArrayList, 因為它不考慮線程安全, 效率會高些; 如果有多個線程會訪問到集合, 那最好是
使用Vector,因為不需要我們自己再去考慮和編寫線程安全的代碼。
當集合長度不夠時,ArrayList增加原來的0.5倍,Vector增長原來的一倍,
Vector還可以設置增長的空間大小,而ArrayList沒有提供設置增長空間的方法。
8、 HashMap和Hashtable的區別
共同點:都完成了Map接口
不同點:
HashMap是Hashtable的輕量級實現,
HashMap允許空( null) 鍵值( key),
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
HashMap是線程序不安全的,而 Hashtable 是線程安全的。
9、 List 和 Map 區別?
List是存儲單列數據的集合,存儲的數據是有順序,並且允許重復
Map是存儲鍵和值這樣的雙列數據的集合,存儲的數據是沒有順序的,其鍵是不能重復的,它的
值是可以有重復的。
10、try {}裏有一個 return語句,那麽緊跟在這個 try後的 finally{}裏的code 會不會被執行,
什麽時候被執行,在 return前還是後?
return之前,但往更細地說,在return中間執行,請看下
面程序代碼的運行結果:
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());;
}
static int test() {
int x = 1;
try{
return x;
}finally{
++x;
}
}
}
---------執行結果 ---------
1
————————————
說明:運行結果是1,主函數調用子函數並得到結果的過程,好比主函數準備一個
空罐子, 當子函數要返回結果時, 先把結果放在罐子裏, 然後再將程序邏輯返回到主
函數。 所謂返回, 就是子函數說, 我不運行了, 你主函數繼續運行吧, 這沒什麽結果
可言,結果是在說這話之前放進罐子裏的。
11、 final,finally, finalize的區別。
final 用於聲明屬性, 方法和類, 分別表示屬性不可變,方法不可覆蓋, 類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法, 在垃圾收集器執行的時候會調用某個回收對象的finalize方法,
可以覆蓋此方法提供垃圾收集時的其他資源回收, 例如關閉文件等。 JVM不保證此方
法總被調用
12、運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能
遇到的異常, 是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時
異常,但是並不要求必須聲明拋出未被捕獲的運行時異常
13、 Strings ="Hello";s= s +" world!";這兩行代碼執行後, 原始的 String對象中的內容到底變了沒有?
沒有。因為 String被設計成不可變類,所以它的所有對象都是不可變對象。
在這段代碼中, s原先指向一個 String對象,內容是 "Hello",然後我們對 s進行了+操作,
這時, s不指向原來那個對象了,而指向了另一個 String對象,內容為"Hello world!",
原來那個對象還存在於內存之中,只是s這個引用變量不再指向它了。
所以如果使用 String來經常對字符串進行各種各樣的修改,或者說, 不可預見的修改的話會引起很大的內存開銷。
因為String對象建立之後不能再改變, 所以對於每一個不同的字符串, 都需要一個String對象來
表示。這時,應該考慮使用 StringBuffer類,它允許修改,而不是每個不同的字符串都要生
成一個新的對象。並且,這兩種類的對象轉換十分容易。
對於字符串常量, 如果內容相同, Java認為它們代表同一
個 String對象。而用關鍵字 new調用構造器,總是會創建一個新的對象,無論內容是否相同。
14、是否可以繼承 String類?
String類是 final類故不可以繼承。
15、 Strings =new String("xyz");創建了幾個 StringObject? 二者之間有什麽區別?
兩個或一個, ”xyz”對應一個對象,這個對象放在字符串常量緩沖區,常量”xyz”不管出現
多少遍, 都是緩沖區中的那一個。 New String每寫一遍, 就創建一個新的對象,
如果以前就用過’xyz’,這句代表就不會創建”xyz”自己了,直接從緩沖區拿
------附加面試小技巧。
如果面試過程中,你感覺還可以,最後面面試官問你,你還有什麽要問的,
你可以嘗試這樣回答:如果有幸進入貴公司,我需要提前準備什麽前期工作嗎?
這樣有概率提高自己拿到offer喔!
Java常見的面試題目___來著<Java面試寶典>