JVM(Java Virtual Machine)是執行字節碼的虛擬機。Java 源碼編譯為 .class 字節碼,JVM 屏蔽了底層 OS 與硬件差異,實現「一次編譯,到處運行」。
不能直接訪問。靜態屬於類,類加載時初始化;非靜態屬於實例,需 new 對象後才存在。若在靜態方法中直接用非靜態變量,編譯報錯。解決:new MyClass().nonStaticField。
| 維度 | Override | Overload |
|---|---|---|
| 發生位置 | 父子類之間 | 同一類內部 |
| 方法名 | 相同 | 相同 |
| 參數列表 | 必須相同 | 必須不同(個數/類型/順序) |
| 返回類型 | 相同或协变類型 | 可不同 |
| 訪問權限 | 不能降低 | 可任意 |
| 異常 | 不能拋出更寬泛的受檢異常 | 無限制 |
類單繼承,接口多實現。一個類只能 extends 一個父類,但可 implements 多個接口(Java 8+ 接口支持 default 方法,變相實現多繼承行為)。
目的:識別並回收不再使用的對象,釋放內存。觸發:Eden 區滿、老年代滿、Metaspace 不足、手動 System.gc()(僅建議)、JVM 內存達到閾值等。
對象被 GC 回收前調用(非決定性),用於釋放非 Java 資源(如文件句柄、Socket、JNI 內存)。不推薦依賴,建議實現 AutoCloseable 配合 try-with-resources 顯式關閉。
不會。對象變為「不可達」,需等待下一次 GC 掃描到才會回收。System.gc() 僅建議,不保證立即執行。