前言
本文系統整理 Java SE 核心知識體系,涵蓋開發環境、基礎語法、面向對象、集合框架、異常處理、IO 流、多線程、JDBC、反射、常用工具類等模塊,作為從入門到進階的結構化速查手冊。
一、開發環境搭建
| 組件 | 說明 | 關鍵配置 |
| JDK | Java Development Kit,含編譯器、JVM、類庫 | JAVA_HOME、PATH+=bin、CLASSPATH=.;lib |
| JRE | Java Runtime Environment,JDK 子集,僅運行 | 生產部署僅需 JRE |
| JVM | Java Virtual Machine,字節碼解釋執行 | 堆/棧/方法區/程序計數器/本地方法棧 |
| IDE | Eclipse / IntelliJ IDEA / NetBeans | 推薦 IDEA,Maven/Git/Gradle 集成 |
二、基礎語法核心
1. 標識符規則
- 字母、數字、
_、$ 組成,數字不能開頭
- 區分大小寫,不可為關鍵字/保留字
- 駝峰命名:
userName、MAX_COUNT、UserService
2. 八大基本類型
| 類型 | 位數 | 默認值 | 包裝類 |
| byte | 8 | 0 | Byte |
| short | 16 | 0 | Short |
| int | 32 | 0 | Integer |
| long | 64 | 0L | Long |
| float | 32 | 0.0f | Float |
| double | 64 | 0.0 | Double |
| char | 16 | '\u0000' | Character |
| boolean | 1 | false | Boolean |
3. 類型轉換
- 自動轉換(隱式):小範圍 → 大範圍
int → double
- 強制轉換(顯式):大範圍 → 小範圍
(int) 3.99 → 3(截斷非四捨五入)
- 包裝類 ↔ 基本類型:自動裝箱/拆箱
Integer i = 10; int n = i;
- 字符串轉換:
String.valueOf()、Integer.parseInt()、Double.valueOf()
4. 運算符優先級
單目 > 算術 > 移位 > 比較 > 邏輯 > 三元 > 賦值
三、面向對象三大特性
1. 封裝
private 字段 + public getter/setter
- 構造器初始化,
this 區分同名字段
2. 繼承
extends 單繼承,super 調用父構造/方法
- 初始化順序:父靜態 → 子靜態 → 父實例 → 父構造 → 子實例 → 子構造
final 類/方法/字段禁止繼承/重寫/修改
3. 多態
- 引用多態:
Animal a = new Cat();
- 方法多態:重寫
@Override,運行期動態分派
- 向上轉型安全,向下轉型需
instanceof 守衛
4. 抽象類 vs 接口
| 特性 | 抽象類 | 接口 |
| 關鍵字 | abstract class | interface |
| 方法 | 可有抽象/具體/靜態/私有 | 默認 public abstract,JDK8+ default/static/private |
| 字段 | 任意 | 默認 public static final |
| 構造器 | 有 | 無 |
| 繼承/實現 | 單繼承 | 多實現 |
四、核心 API 常用類
1. String 不可變字符序列
== 比引用,equals() 比內容
- 常用:
substring、indexOf、split、replace、format
- 拼接用
StringBuilder(非線程安全)或 StringBuffer(線程安全)
2. 包裝類與基本類型轉換
// 基本 → 包裝
Integer i1 = 100; // 自動裝箱
Integer i2 = Integer.valueOf(100);
// 包裝 → 基本
int n1 = i1; // 自動拆箱
int n2 = i1.intValue();
// 字符串 ↔ 基本/包裝
String s = String.valueOf(100);
int n3 = Integer.parseInt("100");
double d = Double.parseDouble("3.14");
3. 日期時間 (JDK 8+ java.time)
LocalDate date = LocalDate.now();
LocalDateTime dt = LocalDateTime.now();
Instant now = Instant.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String str = dt.format(fmt);
五、集合框架全景
Collection
├── List (有序、可重複)
│ ├── ArrayList (數組、查詢快)
│ ├── LinkedList (鏈表、增刪快、可作隊列/棧)
│ └── Vector (線程安全、舊)
├── Set (無序、不可重複)
│ ├── HashSet (HashMap、無序)
│ ├── LinkedHashSet (有序、插入序)
│ └── TreeSet (紅黑樹、自然序/比較器序)
└── Queue (隊列)
├── PriorityQueue (優先級)
├── ArrayDeque (雙端隊列、棧)
└── LinkedList (也實現 Queue)
Map
├── HashMap (數組+鏈表/紅黑樹、非線程安全)
├── LinkedHashMap (有序、插入/訪問序)
├── TreeMap (紅黑樹、Key 有序)
├── Hashtable (線程安全、舊)
└── ConcurrentHashMap (分段鎖/CAS、高並發)
六、異常處理體系
Throwable
├── Error (嚴重、不可恢復:OOM, StackOverflow)
└── Exception (可捕獲處理)
├── RuntimeException (非受檢:NPE, ClassCast, IndexOutOfBounds)
└── 受檢異常 (IOException, SQLException, ClassNotFoundException)
try-catch-finally / try-with-resources (JDK 7+ 自動關閉)
throw 拋出,throws 聲明
- 自定義異常繼承
RuntimeException 或 Exception
七、IO 流體系
| 分類 | 字節流 | 字符流 |
| 輸入 | InputStream → FileInputStream, ByteArrayInputStream | Reader → FileReader, StringReader |
| 輸出 | OutputStream → FileOutputStream, ByteArrayOutputStream | Writer → FileWriter, StringWriter |
| 轉換 | InputStreamReader, OutputStreamWriter (指定 charset) |
| 緩衝 | BufferedInputStream, BufferedReader (高效讀行) |
| 對象序列化 | ObjectOutputStream, ObjectInputStream (實現 Serializable) |
八、多線程核心
- 創建:
extends Thread / implements Runnable / Callable+Future / 線程池
- 同步:
synchronized / Lock / volatile / ThreadLocal / 原子類
- 協作:
wait/notify / Condition / CountDownLatch / CyclicBarrier / Semaphore
- 線程池:
Executors / ThreadPoolExecutor 七大參數、拒絕策略
- JUC:
ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue, CompletableFuture
九、JDBC 標準流程
1. 加載驅動: Class.forName("com.mysql.cj.jdbc.Driver")
2. 獲取連接: DriverManager.getConnection(url, user, pwd)
3. 預編譯: PreparedStatement ps = conn.prepareStatement(sql)
4. 設置參數: ps.setInt(1, id); ps.setString(2, name);
5. 執行: ResultSet rs = ps.executeQuery() / ps.executeUpdate()
6. 處理結果: while(rs.next()) { ... }
7. 釋放資源: try-with-resources 自動關閉 rs, ps, conn
十、反射機制
Class> clazz = Class.forName("com.example.User");
Constructor> ctor = clazz.getConstructor(String.class, int.class);
User user = (User) ctor.newInstance("Alice", 25);
Method method = clazz.getMethod("setName", String.class);
method.invoke(user, "Bob");
Field field = clazz.getDeclaredField("age");
field.setAccessible(true);
field.setInt(user, 26);
十一、學習方法論
- 多練:敲代碼 > 看視頻,肌肉記憶 API
- 多問:StackOverflow、技術社群、源碼閱讀
- 多調試:Debug 斷點、評估表達式、堆棧分析
- 多總結:知識點卡片、周/月複盤、博客輸出倒逼輸入
- 項目驅動:小項目串聯知識點(如:學生管理、電商簡易版)
總結
Java SE 知識體系龐大但脈絡清晰:語法基石 → OO 思想 → 核心 API → 異常/IO/多線程/JDBC/反射 → 框架生態。建立結構化知識圖譜,配合項目實戰與持續複盤,是從菜鳥進階為資深工程師的必經之路。