存取修飾子(Access Modifiers)
| 修飾子 | 適用範圍 | 可見範圍說明 |
|---|---|---|
public |
類別、方法、變數 | 任何地方都可以用 |
protected |
方法、變數 | 自己 + 同包 + 子類別可以用 |
| (default) | 類別、方法、變數 | 同一包才可以用(沒寫就是 default) |
private |
方法、變數 | 只有自己類別內部可以用 |
- 口訣:
公保包私→public→protected→default→private(從開放到封閉)
補充:
- default 不是關鍵字,但如果沒寫修飾子就是 default 權限。
- 類別只能是
public或 (default),不能是private或protected。
非存取修飾子(Non-access Modifiers)
| 修飾子 | 可用於 | 說明與作用 |
|---|---|---|
static |
變數、方法 | 屬於類別本身,不需要建立物件就可以使用 |
final |
類別、方法、變數 | 類別:不能被繼承;方法:不能被覆寫;變數:成為常數(值不可改變) |
abstract |
類別、方法 | 抽象類別不可實體化;抽象方法沒有實作內容(需由子類別實作) |
synchronized |
方法、區塊 | 多執行緒存取控制,確保同一時間只有一個執行緒存取(鎖) |
volatile |
變數 | 變數直接從主記憶體讀取,確保多執行緒時資料一致性(同步記憶體) |
transient |
變數 | 在物件序列化時(如寫入檔案),此變數會被忽略 |
native |
方法 | 使用 C/C++ 等原生語言實作的方法 |
strictfp |
類別、方法 | 限制浮點數運算符合 IEEE 754 標準(確保不同平台結果一致) |
常見修飾子搭配範例
1 | |
靜態與常數變數示範
1 | |
使用範例:
1 | |
synchronized 與 volatile 示範(之後學即可)
1 | |
volatile確保讀到最新值;synchronized確保同時只有一個執行緒可以進入方法。
transient 示例(之後學即可)
1 | |
修飾子使用限制整理
| 修飾子 | 類別 | 方法 | 變數 | 區塊 |
|---|---|---|---|---|
public |
✅ | ✅ | ✅ | ❌ |
private |
❌ | ✅ | ✅ | ❌ |
protected |
❌ | ✅ | ✅ | ❌ |
static |
❌ | ✅ | ✅ | ❌ |
final |
✅ | ✅ | ✅ | ❌ |
abstract |
✅ | ✅ | ❌ | ❌ |
synchronized |
❌ | ✅ | ❌ | ✅ |
volatile |
❌ | ❌ | ✅ | ❌ |
transient |
❌ | ❌ | ✅ | ❌ |
native |
❌ | ✅ | ❌ | ❌ |
strictfp |
✅ | ✅ | ❌ | ❌ |