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

Java 入門必修 30 個核心概念:從 OOP 基石到反射機制

     編輯:Java 相關知識

前言

Java 語言設計哲學貫穿於這 30 個核心概念中。掌握它們,即掌握了 Java 思維的骨架。本文按邏輯層次重新組織,配合代碼示例與記憶鉤子,助你構建堅不可摧的知識網絡。

一、面向對象三大支柱與核心關係

1. 對象 = 狀態 + 行為 + 標識

  • 狀態:實例字段 (instance fields)
  • 行為:方法 (methods)
  • 標識:內存地址/引用,== 比較標識,equals() 比較狀態

2. 類是模板,對象是實例

Date happyDay = new Date(); // Date 是類,happyDay 是引用變量,new Date() 是對象實例

3. 封裝:隱藏實現,暴露接口

private 字段 + public getter/setter = 受控訪問。好處:可隨時修改內部實現不影響調用者。

4. 繼承:is-a 關係,復用與擴展

class Student extends Person { // Student is-a Person
    // 自動擁有 Person 的非 private 成員
}

所有類隱式繼承 java.lang.Object (根超類)。

5. 多態:引用類型與實際類型分離

Object obj = "Hello"; // 編譯類型 Object,運行類型 String
obj.toString(); // 動態綁定調用 String.toString()

6. 類間關係圖譜

關係符號含義代碼體現
依賴use-a臨時使用方法參數、局部變量、靜態方法調用
聚合has-a整體-部分,生命周期獨立class Car { Engine engine; }
組合contains-a強聚合,生命周期綁定class House { Room room = new Room(); }
繼承is-a泛化-特化class Cat extends Animal
實現implements契約履行class ArrayList implements List

二、構造器與方法重載

7. 構造器特徵

  • 同類名、無返回值(連 void 都沒有)
  • 可重載(參數列表不同)
  • 必須配合 new 使用
  • 無顯式構造器 → 編譯器生成無參構造器

8. 重載 vs 覆蓋

維度重載覆蓋
發生位置同一類 / 父子類父子類
方法簽名同名、不同參數列表完全相同
返回類型可不同必須兼容 (协变返回)
綁定時機編譯期靜態綁定運行期動態綁定

三、包機制與訪問控制

9. 包:命名空間與訪問邊界

  • 層次結構:java.lang、java.util、javax.sql...
  • package 語句必須在源文件首行
  • 導入:import java.util.*; (按需導入具體類更佳)

10. 四大訪問修飾符可見性矩陣

修飾符同類同包子類(異包)非子類(異包)
private✓✗✗✗
default✓✓✗✗
protected✓✓✓✗
public✓✓✓✓

四、關鍵字深度解析

11. static:屬於類而非實例

  • 靜態字段:全類共享一份內存
  • 靜態方法:無 this,只能訪問靜態成員
  • 靜態塊:類加載時執行一次,適合初始化靜態資源

12. final:三重含義

  • final class:不可繼承 (如 String)
  • final method:不可覆蓋
  • final variable:引用不可變 (基本類型值不可變,引用類型指向不可變)

13. abstract:規定契約,延遲實現

  • 抽象類:含抽象方法的類必須聲明 abstract
  • 抽象方法:無方法體,以分號結尾
  • 不能實例化抽象類,只能實例化其具體子類

五、Object 通用父類與核心契約

14. equals() 契約:自反性、對稱性、傳遞性、一致性、非空性

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass that = (MyClass) o;
    return Objects.equals(field1, that.field1) && Objects.equals(field2, that.field2);
}

15. hashCode() 契約:equals 相等 → hashCode 必相等

配合 HashMap/HashSet 使用時必須同時重寫。

16. toString():調試與日誌的生命線

默認輸出 ClassName@hashCode,極無意義。必須重寫輸出業務關鍵字段。

六、泛型與集合框架

17. 泛型:編譯期類型安全,運行期類型擦除

List list = new ArrayList<>();
list.add("Hello");
// list.add(123); // 編譯報錯
String s = list.get(0); // 無需強轉

18. ArrayList vs LinkedList 選型

  • 隨機訪問多 → ArrayList (底層數組,O(1) 獲取)
  • 頭尾增刪多 → LinkedList (底層雙向鏈表,O(1) 插入刪除)
  • 絕大多數業務場景:ArrayList 更優 (CPU 緩存友好)

七、反射機制:運行時解剖類結構

19. Class 對象:類的元數據入口

Class clazz1 = String.class;
Class clazz2 = "Hello".getClass();
Class clazz3 = Class.forName("java.lang.String");

20. 核心反射 API

API用途
clazz.getFields()獲取所有 public 字段 (含繼承)
clazz.getDeclaredFields()獲取本類聲明的所有字段 (含 private)
clazz.getMethods()獲取所有 public 方法 (含繼承)
clazz.getDeclaredMethods()獲取本類聲明的所有方法
clazz.getConstructors()獲取 public 構造器
field.setAccessible(true)暴力反射訪問 private 成員

21. 反射應用場景

  • 框架開發:Spring IOC 掃描註解、MyBatis 映射 ResultSet
  • 動態代理:JDK Proxy / CGLIB
  • 熱加載/插件系統
  • 單元測試訪問私有方法

八、接口與回調模式

22. 接口:契約而非實現

  • JDK 8 前:只有抽象方法、常量
  • JDK 8+:default 默認方法、static 靜態方法、private 私有方法
  • 類可實現多個接口,單繼承多實現

23. 回調模式:別調用我,我調用你

// 經典:ActionListener
button.addActionListener(e -> System.out.println("Clicked!"));

// 自定義回調
interface Callback { void onResult(String data); }
void fetchData(Callback cb) { /* ... */ cb.onResult("data"); }

九、內部類與代理模式

24. 內部類四大類型

類型定義位置訪問外部成員典型用途
成員內部類類內部、方法外可訪問所有 (含 private)實現邏輯強綁定
靜態內部類類內部、方法外 + static只能訪問靜態成員單例模式、Builder 模式
局部內部類方法內部可訪問 final/效果上 final 變量封裝一次性邏輯
匿名內部類表達式中同局部內部類事件監聽、Runnable、比較器

25. 動態代理:為接口生成代理實現

interface Service { void serve(); }
class RealService implements Service { public void serve() { System.out.println("Real"); } }

InvocationHandler handler = (proxy, method, args) -> {
    System.out.println("Before");
    method.invoke(new RealService(), args);
    System.out.println("After");
    return null;
};
Service proxy = (Service) Proxy.newProxyInstance(
    Service.class.getClassLoader(), 
    new Class[]{Service.class}, 
    handler
);
proxy.serve(); // 輸出 Before → Real → After

十、克隆、基本類型與記憶鉤子總結

26. clone():淺拷貝 vs 深拷貝

  • 實現 Cloneable 標記接口,重寫 clone() 為 public
  • 默認淺拷貝:引用類型字段共享同一對象
  • 深拷貝:手動遞歸拷貝所有可變對象

27. 八大基本類型速記

分類類型位數默認值包裝類
整數byte80Byte
short160Short
int320Integer
long640LLong
浮點float320.0fFloat
double640.0dDouble
字符char16'\u0000'Character
布爾boolean1 (JVM 實現相關)falseBoolean

28. 自動裝箱/拆箱陷阱

Integer a = 1000, b = 1000;
System.out.println(a == b); // false (超出 -128~127 緩存範圍)
Integer c = 100, d = 100;
System.out.println(c == d); // true (緩存池複用)

29. 記憶鉤子:30 概念一句話串聯

對象三要素狀態行為標識,類是模板實例對象。封裝隱藏繼承is-a多態動態綁定。構造器同名無返回配合new,重載同名參數不同覆蓋簽名相同動態綁定。包管理命名空間四大訪問權限矩陣記心間。static屬類final三重含義abstract規定契約。Object三大契約equals哈希碼toString調試命。泛型擦除編譯期安全集合框架ArrayList優先。反射運行時解剖類Class對象入口FieldMethodConstructor。接口契約單繼承多實現回調別調用我我調用你。內部類四類型匿名最常用動態代理Proxy生成實現。Cloneable標記淺拷貝深拷貝手動遞歸。八大基本類型位數默認值包裝類自動裝箱拆箱緩存陷阱。

30. 進階方向指引

  • JVM 內存模型與 GC 原理
  • 並發編程:JUC、AQS、線程池、鎖優化
  • 類加載機制與模塊化 (JPMS)
  • 函數式編程:Stream API、Optional、CompletableFuture
  • GraalVM 原生編譯與云原生適配

總結

這 30 個概念是 Java 程序員的「內功心法」。不求一次全記,但求在編碼、除錯、閱讀源碼時能條件反射般調用。建議:打印核心表格貼工位,每周複習一個專題,半年後必成體系。

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