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

Java 基礎盲點整理:10 個易被忽視的核心知識點

     編輯:Java 綜合教學

Java 基礎盲點整理:10 個易被忽視的核心知識點

整理自實戰經驗與面試高頻考點,這 10 個細節常被開發者忽略,卻關鍵影響程式正確性與效能。

  1. 只有類的成員變數(欄位)有預設值
    區域變數必須顯式初始化,否則編譯錯誤。
  2. finalize() 不是解構函式
    Java 無解構函式。finalize() 主要用於跨語言資源釋放(如 JNI 的 malloc/free)。GC 呼叫時間不確定,不可依賴它釋放關鍵資源,應使用 try-with-resources 或 AutoCloseable。
  3. 靜態區塊 static{} 在類載入時執行,非靜態區塊與建構子在建立物件時執行
    順序:父類靜態區塊 → 子類靜態區塊 → 父類非靜態區塊 → 父類建構子 → 子類非靜態區塊 → 子類建構子。
  4. 內部類可存取外部類所有成員(含 private)
    編譯器會生成包私有存取方法(access$xxx),這也是為何內部類能打破封裝的原因。
  5. 內部類可變相實現「多重繼承」
    每個內部類可獨立繼承不同類別或實作不同介面,外部類透過內部類實例間接擁有多重實作能力。
  6. 匿名內部類常用於實例初始化(雙大括號語法)
    如 new HashMap(){{ put("k","v"); }},本質是建立匿名子類並在實例初始化區塊操作。注意:持有外部類引用,可能導致記憶體洩漏。
  7. 動態代理核心:InvocationHandler + Proxy.newProxyInstance()
    代理類在執行期動態生成,攔截方法呼叫,實現 AOP、遠程呼叫等橫切關注點。代理類繼承 Proxy,實作目標介面。
  8. HashMap 容量與負載因子調優
    預估資料量時,設定 new HashMap<>(capacity, loadFactor) 避免擴容與再雜湊開銷。預設負載因子 0.75,容量達 3/4 觸發擴容。
  9. transient 關鍵字阻止欄位序列化
    適用於敏感資料(密碼)、衍生欄位、非序列化物件引用。反序列化時該欄位為預設值(null/0/false)。
  10. ThreadLocal 應宣告為 static 欄位
    確保同一類的所有實例共享同一 ThreadLocal 變數,每條執行緒獨立儲存副本。非 static 會導致每個實例建立獨立 Map,失去隔離意義。

延伸閱讀

  • 《Effective Java》第 3 版:條款 8(覆寫 finalize)、條款 83(慎用 ThreadLocal)
  • JVM 規範:類初始化流程、finalize 語義
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved