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

Java 核心知識點深度解析:12 道高頻面試題詳解

     編輯:Java 程式設計入門

1. final、finally、finalize 三者區別

  • final:修飾符。修飾類→不可繼承;修飾方法→不可覆寫;修飾變量→常量(聲明時賦值,不可改)。abstract 與 final 互斥。
  • finally:異常處理塊。try-catch 後必執行(除 System.exit()),用於資源釋放。
  • finalize():Object 方法。GC 回收對象前調用,供子類覆寫釋放原生資源。不保證被調用,Java 9+ 已棄用,推薦 try-with-resources 或 Cleaner。

2. 匿名內部類能否 extends / implements?

不能 extends 其他類**,但可 implements 一個介面**(隱式實現)。本質是「繼承一個類或實現一個介面」的語法糖,編譯器生成一個繼承目標類/實現目標介面的匿名子類。

3. Static Nested Class vs Inner Class

特性Static Nested ClassInner Class (非靜態)
外部類引用無持有隱式引用 (Outer.this)
創建實例new Outer.Nested()outer.new Inner()
訪問外部成員僅 static 成員所有成員(含私有)
C++ 對應Nested Class無直接對應(C++ 無隱式 this 指針)

關鍵差異在於是否持有外部實例引用,影響記憶體佔用與序列化行為。

4. & vs &&

  • &:位運算符(按位與),不短路,兩邊必評估
  • &&:邏輯與,短路,左邊 false 時右邊不執行

5. HashMap vs Hashtable

現代開發推薦 HashMap + 外部同步或 ConcurrentHashMap。

6. Collection vs Collections

  • Collection:頂層介面(List、Set、Queue 父介面)
  • Collections:工具類(sort、binarySearch、synchronizedList、unmodifiableList 等 static 方法)

7. assert 斷言使用指南

語法:assert 條件 或 assert 條件 : 詳細訊息。預設關閉,啟用需 -ea 或 -enableassertions。

適用場景:

  • 私有方法前置條件檢查
  • 代碼邏輯「理論上不可達」處(如 default: assert false)
  • 後置條件驗證

禁用場景:公共方法參數檢查(必須拋異常)、改變程序狀態的表達式。

8. GC (Garbage Collector) 基礎

  • 自動內存管理,開發者無需手動 free/delete
  • 可請求 GC:System.gc() 或 Runtime.getRuntime().gc()(非強制)
  • 現代 JVM 採用分代收集(新生代/老年代)、G1、ZGC 等演算法

9. String s = new String("xyz") 創建幾個對象?

兩個:

  1. 字串常量池中的 "xyz"(若不存在則創建)
  2. 堆上新建的 String 實例 s,內容複製自常量池

10. Math.round() 行為

  • Math.round(11.5) → 12(長整數)
  • Math.round(-11.5) → -11(負數向零方向取整,即 floor(x + 0.5))

11. short 算術陷阱

short s1 = 1;
s1 = s1 + 1; // 編譯錯誤:s1+1 提升為 int,需強轉 (short)(s1+1)
s1 += 1;     // 正確:複合賦值隱含強轉

12. sleep() vs wait()

特性HashMapHashtable
同步性非線程安全同步(synchronized)
Null 鍵/值允許 1 個 null key、多個 null value不允許
效能高低(鎖開銷)
繼承MapDictionary → Map

sleep 用於延遲,wait 用於線程協作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性sleep()wait()
所屬類Thread (static)Object
鎖行為不釋放鎖釋放鎖,進入等待集
喚醒方式時間到/中斷notify/notifyAll / 中斷
調用前提無必須持有對象鎖 (在 synchronized 中)