一、開發環境與基礎語法
1. 環境變量配置
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_51
PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;...
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
注意:JDK 9+ 無需配置 CLASSPATH,模塊系統自動解析依賴。
2. 基本數據類型與字面量
| 類型 | 位數 | 默認值 | 字面量示例 |
| byte | 8 | 0 | (byte)100 |
| short | 16 | 0 | (short)1000 |
| int | 32 | 0 | 100, 0x64, 0144 |
| long | 64 | 0L | 100L, 0x64L |
| float | 32 | 0.0f | 3.14f, 1.2e-3f |
| double | 64 | 0.0 | 3.14, 1.2e-3 |
| char | 16 | '\u0000' | '中', '\u4e2d' |
| boolean | 1 | false | true, false |
3. 變量作用域與初始化
- 成員變量(實例/靜態):有默認值,類加載/實例化時初始化。
- 局部變量(方法內/參數):無默認值,使用前必須顯式初始化,否則編譯錯誤。
4. 運算符重點
- 自增/自減:
++i 先增後用,i++ 先用後增。
- 字符串 +:任意一方為 String 則拼接,左至右結合。
- 短路邏輯:
&&、|| 遇到確定結果跳過後續運算。
- 三目運算:
condition ? expr1 : expr2,類型向上兼容。
二、流程控制與數組
1. 分支與循環
switch (JDK 7+ 支援 String),case 穿透需 break。
while 先判斷後執行;do-while 至少執行一次。
for 適用於已知次數;增強 for (for (E e : coll)) 底層為迭代器,遍歷過程中不可修改集合結構。
2. 數組操作
int[] arr = new int[10]; // 默認值 0
int[] arr = {1,3,5,7}; // 靜態初始化
System.arraycopy(src, 0, dest, 0, 5); // 高效複製
Arrays.copyOf(arr, 20); // 擴容/截取,不足填充默認值
Arrays.sort(arr); // 雙軸快排,優於冒泡
三、面向對象核心
1. 類與對象
- 類是模板,對象是實例(堆內存),引用變量指向對象(棧內存)。
this:當前對象引用,區分同名成員/局部變量,構造器鏈調用 this(...) 必須首行。
static:屬於類,方法區存儲一份,無 this,只能訪問靜態成員。
final:變量不可變(引用不變)、方法不可重寫、類不可繼承。static final 編譯期常量折疊優化。
2. 繼承與多態
- 單繼承
extends,多實現 implements。
- 子類構造器默認調用
super(),父類無無參構造則需顯式 super(args)。
- 向上造型:父類引用指向子類對象,調用方法看對象類型(動態綁定),訪問字段看引用類型(靜態綁定)。
instanceof 安全向下造型前檢查。
3. 抽象類與接口
| 特性 | 抽象類 | 接口 (JDK 8+) |
| 關鍵字 | abstract class | interface |
| 方法 | 抽象 + 普通 + 默認 | 抽象 + default + static + private |
| 字段 | 任意 | 默認 public static final |
| 構造器 | 有(供子類調用) | 無 |
| 多實現 | 單繼承 | 多實現 |
四、核心 API 常用類
1. 字符串處理
String:不可變,常量池優化,intern() 手動入池。
StringBuilder:非線程安全,高性能拼接(append/insert/delete/replace/reverse)。
StringBuffer:線程安全(方法加 synchronized),性能較低。
2. 正則表達式
// 常用元字符
\d 數字 \w 單詞字符 \s 空白
. 任意字符 * 0~n次 + 1~n次 ? 0~1次
{n} 精確n次 {n,} 至少n次 {n,m} n到m次
^ $ 行首尾 () 分組捕獲 | 或
// 核心方法
str.matches(regex) // 整體匹配
str.split(regex) // 分割
str.replaceAll(regex, r) // 替換
Pattern.compile(regex).matcher(str) // 複雜提取:find()/group()/start()/end()
3. 包裝類與自動拆裝箱
- 八大基本類型對應包裝類(
Integer 等),繼承 Number 或 Object。
valueOf() 緩存 -128~127,推薦替代 new Integer()。
- 自動拆裝箱:
Integer i = 100; int n = i; 編譯器插入 valueOf/intValue。
BigDecimal:精確浮點運算(add/subtract/multiply/divide(scale, roundingMode))。
4. 日期時間 (JDK 8+ 推薦 java.time)
LocalDateTime.now(); // 當前日期時間
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate.parse("2023-01-01", formatter);
Duration.between(start, end).toMillis(); // 間隔毫秒
5. 集合框架體系
Collection
├── List (有序、可重複) → ArrayList(查詢快) / LinkedList(增刪快、雙端隊列/棧)
├── Set (無序、不可重複) → HashSet / LinkedHashSet(插入序) / TreeSet(有序)
└── Queue (隊列) → PriorityQueue / ArrayDeque(雙端)
Map (鍵值對)
├── HashMap (無序、鍵不可重複、允許 null key/value)
├── LinkedHashMap (插入序/訪問序)
├── TreeMap (鍵自然序/比較器序、不允許 null key)
└── ConcurrentHashMap (高並發、分段鎖/CAS)
核心操作
- 遍歷:
Iterator(可刪除)、增強 for(只讀)、forEach (JDK 8)。
- 排序:
Collections.sort(list) (自然序) 或 list.sort(comparator) (定制序)。
- 轉換:
collection.toArray()、Arrays.asList(arr) (固定長度)、new ArrayList<>(list) (可變)。
五、異常處理機制
體系結構
Throwable
├── Error (系統級,不可恢復:OOM, StackOverflow)
└── Exception
├── RuntimeException (非檢查:NPE, IndexOOB, ClassCast, Arithmetic)
└── 其他 (檢查异常:IOException, ParseException, SQLException)
處理模式
try {
risky();
} catch (SpecificException e) {
handle();
} catch (Exception e) { // 父類放後
log();
} finally {
cleanup(); // 必執行(除 System.exit/崩潰)
}
throws 聲明拋出管道,調用者必須捕獲或繼續拋出。
- 自定義異常繼承
Exception (檢查) 或 RuntimeException (非檢查)。
六、IO 流體系
分類
| 方向 | 字節流 (二進制) | 字符流 (文本) |
| 輸入 | InputStream → FileInputStream, BufferedInputStream, DataInputStream, ObjectInputStream | Reader → FileReader, BufferedReader, InputStreamReader(轉換流) |
| 輸出 | OutputStream → FileOutputStream, BufferedOutputStream, DataOutputStream, ObjectOutputStream | Writer → FileWriter, BufferedWriter, OutputStreamWriter(轉換流) |
關鍵點
- 字節流處理圖片/視頻/序列化;字符流處理文本(編碼轉換:
getBytes(charset)/new String(bytes, charset))。
- 緩衝流 (
Buffered*) 內部維護 8KB 數組,大幅提升單字節/行讀寫效率。
try-with-resources (JDK 7+) 自動關閉實現 AutoCloseable 的資源。
- 序列化:實現
Serializable,serialVersionUID 版本控制,transient/static 不序列化。
七、多線程基礎
創建方式
- 繼承
Thread 重寫 run()。
- 實現
Runnable 傳入 Thread 構造器(推薦,解耦任務與線程)。
- 線程池
ExecutorService 提交 Runnable/Callable。
同步機制
synchronized:對象鎖/類鎖,可重入,非公平,JVM 優化(偏向鎖→輕量級鎖→重量級鎖)。
Lock:顯式鎖,支援中斷/超時/公平/多條件。
volatile:可見性+有序性,不保證原子性(i++ 非原子)。
- 線程通信:
wait/notify/notifyAll (需在同步塊中)、Condition.await/signal。
線程池
ExecutorService es = Executors.newFixedThreadPool(10); // 固定大小
es.execute(() -> {}); // 無返回值
Future<Integer> f = es.submit(() -> 1); // 有返回值
f.get(3, TimeUnit.SECONDS); // 阻塞獲取結果,支援超時
es.shutdown(); // 優雅關閉
八、常用工具類
Objects:requireNonNull/equals/hashCode/toString 防空指針。
Collections:sort/reverse/shuffle/synchronizedList/unmodifiableList。
Arrays:sort/binarySearch/copyOf/toString/deepEquals。
Math/Random/ThreadLocalRandom:數學運算、隨機數。
提示:本文匯總 Java SE 核心知識點,適合面試複習、知識查漏補缺。實際開發中請結合 Effective Java、JVM 規範、官方 API 文檔深入掌握。
- 上一篇文章: Java 並發包鎖機制全解析:Lock、ReentrantLock、ReadWriteLock 實戰
- 下一篇文章: OpenCV4Android 解決 non-system libraries in linker flags: -lopencv_java 編譯錯誤
Copyright ©
程式碼之家 All Rights Reserved