修飾符與運算符是 Java 程序的骨架。熟練掌握它們的語義、優先級、邊界行為,是寫出正確、高性能、可維護代碼的前提。
| 類別 | 關鍵字 | 作用目標 | 核心語義 |
|---|---|---|---|
| 訪問控制 | public | 類/接口/成員 | 全局可見 |
protected | 成員 | 同包 + 子類可見 | |
default (無) | 類/接口/成員 | 同包可見 | |
private | 成員/內部類 | 僅本類可見 | |
| 非訪問 | static | 成員/內部類/代碼塊 | 屬於類、共享、無 this |
final | 類/方法/變量/參數 | 不可繼承/重寫/修改/重新賦值 | |
abstract | 類/方法 | 強制子類實現、不可實例化 | |
synchronized | 方法/代碼塊 | 內置鎖、互斥、可見性 | |
volatile | 變量 | 可見性、禁止指令重排、非原子 | |
transient | 字段 | 序列化忽略 | |
strictfp | 類/方法 | 浮點運算嚴格遵循 IEEE 754 | |
native | 方法 | 本地實現 (JNI) |
1. 後綴: expr++ expr-- () [] .
2. 一元: ++expr --expr +expr -expr ~ ! (type)new
3. 乘性: * / %
4. 加性: + -
5. 移位: << >> >>>
6. 關系: < <= > >= instanceof
7. 相等: == !=
8. 按位與: &
9. 按位異或: ^
10. 按位或: |
11. 邏輯與: &&
12. 邏輯或: ||
13. 三元: ? :
14. 賦值: = += -= *= /= %= &= ^= |= <<= >>= >>>=
15. Lambda: -> (箭頭運算符,最低)
+ 兼具數值加法與字符串拼接 (任意操作數為 String 觸發)。++/-- 前綴返回新值,後綴返回舊值。ArithmeticException,浮點數產生 Infinity/NaN。==:基本類型比值,引用類型比地址。equals():需重寫比較內容 (String、包裝類、集合已重寫)。instanceof:模式匹配 (Java 16+) if (obj instanceof String s) { ... }。& | ^ ~:按位與/或/異或/取反。<< >> >>>:左移/算術右移/邏輯右移 (無符號補 0)。n << 1 == n*2, n >> 1 == n/2, n & 1 判奇偶, n & (n-1) 清除最低位 1。&& ||:短路求值,右側表達式可能不執行。& |:非短路,雙邊必執行 (少用,除非有副作用需求)。+= 含隱式強轉:byte b=1; b+=2; // 合法,等價 b=(byte)(b+2)。condition ? expr1 : expr2:類型推導向上兼容 (如 int 和 double 結果為 double),NPE 風險 (自動拆箱)。a=b=c=1 右結合:a=(b=(c=1))。+ 左結合:1+2+"3" == "33", "1"+2+3 == "123"。== 比較包裝類緩存範圍 (-128~127) 可能返回 true,超出則 false,**務必用 equals**。volatile 不保證複合操作原子性 (如 i++),需 AtomicInteger 或 synchronized。將優先級表與修飾符語義內化為肌肉記憶,代碼閱讀與編寫將暢行無阻。