首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 面試必考點深度解析:final/finally/finalize、內部類、集合與斷言

     編輯:Java 程式設計入門

一、final、finally、finalize 差異

  • final:修飾符。修飾類 → 不可繼承;修飾方法 → 不可覆寫;修飾變數 → 必須初始化,後續只能讀取不可修改。abstract 與 final 不能同時修飾類。
  • finally:異常處理塊。try-catch 後執行清理操作,無論是否拋出異常皆會執行(除非 JVM 退出)。
  • finalize():Object 方法。垃圾回收器在清除物件前調用,供子類覆寫釋放系統資源(如檔案句柄、網絡連接)。不可預知調用時機,不建議依賴它釋放關鍵資源,應使用 try-with-resources 或顯式 close()。

二、匿名內部類繼承與實作規則

匿名內部類不能 extends 其他類,但可implements 一個介面(隱含實作該介面)。本質上是隱式繼承某類或實作某介面的子類實例化語法糖。

三、Static Nested Class vs Inner Class

最大區別在於是否持有外部類引用:

  • Inner Class(非靜態內部類):實例隱含持有外部類實例引用,可直接訪問外部類所有成員(含私有)。創建需先有外部實例:Outer.Inner in = new Outer().new Inner()。
  • Static Nested Class(靜態內部類):無外部實例引用,創建不需外部實例:Outer.Nested n = new Outer.Nested();無法直接訪問外部類實例成員,僅能訪問靜態成員。

詳細對比見:前端自由網分析

四、& 與 && 區別

  • &:位運算符(按位與),也可作邏輯與但不具備短路特性。
  • &&:邏輯與運算符,具備短路特性(左運算元為 false 時不評估右運算元)。

五、HashMap vs Hashtable

特性HashMapHashtable
繼承/實作實作 Map 介面繼承 Dictionary、實作 Map
同步性非同步(非執行緒安全)同步(執行緒安全)
Null 鍵/值允許一個 null key、多個 null value不允許 null key/value
效能較快較慢(同步開銷)
迭代器fail-fastenumerator 非 fail-fast

單執行緒或並發控制外部化時首選 HashMap;需執行緒安全可用 Collections.synchronizedMap() 包裝或改用 ConcurrentHashMap。

六、Collection vs Collections

  • Collection:java.util 介面,List、Set、Queue 父介面,定義集合通用操作。
  • Collections:java.util 工具類,提供靜態方法:排序、搜尋、同步包裝、不可修改視圖等。

七、assert 斷言使用時機

斷言為包含布林表達式的語句,假定為 true,若為 false 拋出 AssertionError。僅用於除錯/開發階段,預設停用。

assert (a > 0); // a <= 0 拋出錯誤
assert (a > 0) : "a must be positive"; // 帶訊息
  • 編譯啟用:javac -source 1.4 Test.java
  • 運行啟用:java -ea Test 或 -enableassertions
  • 運行停用:java -da Test
  • 系統類啟用:-esa / -dsa

適用場景:私有方法參數驗證、預期不可到達代碼路徑、後置條件檢查。不適用:公有方法參數驗證(必須顯式檢查)、改變程式狀態的邏輯。

八、GC(垃圾回收)基礎

GC = Garbage Collector。Java 程式設計師無需手動管理記憶體,GC 自動回收不可達物件。可主動建議回收:

System.gc();
Runtime.getRuntime().gc();

但 JVM 不保證立即執行。現代 GC(G1、ZGC、Shenandoah)採用分代、並發、區域化等先進演算法,大幅降低停頓時間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved