常見面試題之java基礎

常見面試題之java基礎

1.java面向對象的三大特徵

  • 封裝:將客觀事物抽象成類,每個類對自身的數據和方法進行保護;
  • 繼承:對象的一個新類可從現有的一個類派生,這個過程被稱爲繼承(也就是一個新的類可以繼承原有類的屬性和方法);
  • 多態:同一個行爲具有多個不同的表現形式或形態的能力(我的理解是不同子類繼承父類的方法後,各子類在方法中的實現是不同);

2.int與integer的區別

  1. int是java的一種基本數據類型,integer是int的包裝類;
  2. integer必須要實例化(實例化是指面向對象的編程中,類創建對象的過程稱爲實例化)後才能使用,而int不需要;
  3. integer實際是對象的引用,當new一個integer時,實際上是生成一個指針指向對象,而int則是直接存儲數據值;
  4. integer的默認值是null,int默認值是0;

3.String,StringBuffer,StringBuilder的區別

java中字符串屬於對象,java提供了String類來創建和操作字符串
(1)字符操作上的區別:

  1. String:不可變字符序列;
  2. StringBuffer:可變字符序列、效率低、線程安全;
  3. StringBuilder:可變字符序列、效率高、線程不安全;

(2)初始化上的區別,String可以賦值爲空,而StringBuffer和StringBuilder不行
小結:

  1. 如果操作少量的數據用String;
  2. 多線程操作字符串緩衝區下操作大量數據用StringBuffer;
  3. 單線程操作字符串緩衝區下操作大量數據用StringBuilder;

4.異常的種類

Exception:可捕獲異常,出現的問題是可以捕獲的;
Error:系統錯誤,通常有JVM處理;
可捕獲異常又分爲兩類:

  1. RuntimeException類及其子類異常,又被稱爲非強制性異常,通常可以由throw語句拋出這種異常(編譯時被檢查的異常);
  2. check異常,又被稱爲強制性異常,基本上由Exception類派生而來(編譯時不被檢查的異常,編譯通過)。

5.運行時異常和check異常的區別

  1. 運行時異常在定義方法是不需要聲明也會被拋出,不需要被捕獲;非運行時異常在調用這個方法時必須聲明捕獲這個check異常;
  2. 運行時異常通常是代碼編譯錯誤引起的,是一種調用方本身也無法處理的異常;非運行時異常是一種調用方法捕獲拋出就可以處理的情況。

6.final,finally,finalize的區別

  • final聲明屬性、方法、類,分別表示屬性不可變,方法不可被覆蓋(即方法不可被重寫),類不可被繼承;
  • finally是處理異常結構try/catch模塊的一部分,表示總是被執行;
  • finallize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法。

7.轉發與重定向的區別

  • 轉發url地址保持不變,只發送了一次請求(舉個例子,轉發就相當於甲託乙辦事,乙找到丙辦理此事,請求沒變化,只有一次);
  • 重定向url地址發生變化,發送了兩次請求(重定向相當於甲託乙辦事,乙辦不成,甲又重新找到丙辦理的此事,甲相當於有了兩次請求);

8.方法重寫和方法重載的區別
(1)方法重載

  • 方法重載在同一個類中,方法名相同
  • 使用重載時只能通過不同的參數列表;
  • 方法的異常類型和數目不會對重載造成影響;
  • 與訪問修飾符,返回類型無關;
  • 可以拋出不同的異常;

(2)方法重寫

  • 方法重寫必須寫在繼承關係中,子類方法名和父類一樣
  • 父類的參數列表和子類重寫方法的參數列表相同;
  • 父類的返回類型和子類重寫方法的返回類型相同;
  • 子類的訪問修飾符不能嚴於父類;

(3)構造函數不能被繼承,構造方法可以重載不能被重寫

9.抽象類與接口的區別

  1. 抽象類中可以有構造方法,接口中不能有構造方法;
  2. 抽象類中可以有普通成員變量,接口中沒有普通成員變量;
  3. 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須是抽象的。

10.靜態方法與實例方法的區別

  1. 靜態方法用static修飾,實例方法沒有;
  2. 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即本類中靜態成員變量和靜態方法),實例方法沒有限制條件;
  3. 在訪問外部類時,調用靜態方法可以用“類名.方法名”,也可以用"對象名.方法名",而實例方法調用只能用後面那種形式。

11.List和Set的區別

  • List存儲數據是有序的隊列,允許有重複的元素(有序不唯一);
  • Set存儲數據是無序的隊列,不允許有重複的元素(無序不唯一),Set一般對基本數據類型的數據會自動去重,對象不可以;
  • Map存儲鍵值對的數據;
  • List和Set是繼承Collection接口的,而Map不是。

12.ArraryList、LinkedList、HashSet、Vector比較

  • ArraryList是數組結構,增刪慢,查找快,非線程安全;
  • LinkedList是鏈表結構,增刪快,查找慢,非線程安全;
  • HashSet是非線程安全;
  • Vector是線程安全的。

13.HashMap和HashTable比較

  • HashMap是非線程安全的,HashTable是線程安全的,HashMap的效率要高於HashTable;
  • HashMap允許將null作爲key或value,HashTable則不允許。

14.訪問修飾符比較

作用域 當前類 同一包中 子類 其他
public
protected ×
default × ×
private × × ×

15.運算符i++和++i的區別

  1. i++是先賦值再加,++i是先加再賦值;
  2. ++i的效率要高於i++;
  3. ++i可以左值,i++不可以。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章