正在載入...
請稍候
封面
示例歌曲名稱
示例藝術家
0:00 / 0:00

播放列表

第十一章:修飾子總整理

未分類
1.8k 字

存取修飾子(Access Modifiers)

修飾子 適用範圍 可見範圍說明
public 類別、方法、變數 任何地方都可以用
protected 方法、變數 自己 + 同包 + 子類別可以用
(default) 類別、方法、變數 同一包才可以用(沒寫就是 default)
private 方法、變數 只有自己類別內部可以用
  • 口訣:公保包私publicprotecteddefaultprivate(從開放到封閉)

補充:

  • default 不是關鍵字,但如果沒寫修飾子就是 default 權限。
  • 類別只能是 public 或 (default),不能是 privateprotected



非存取修飾子(Non-access Modifiers)

修飾子 可用於 說明與作用
static 變數、方法 屬於類別本身,不需要建立物件就可以使用
final 類別、方法、變數 類別:不能被繼承;方法:不能被覆寫;變數:成為常數(值不可改變)
abstract 類別、方法 抽象類別不可實體化;抽象方法沒有實作內容(需由子類別實作)
synchronized 方法、區塊 多執行緒存取控制,確保同一時間只有一個執行緒存取(鎖)
volatile 變數 變數直接從主記憶體讀取,確保多執行緒時資料一致性(同步記憶體)
transient 變數 在物件序列化時(如寫入檔案),此變數會被忽略
native 方法 使用 C/C++ 等原生語言實作的方法
strictfp 類別、方法 限制浮點數運算符合 IEEE 754 標準(確保不同平台結果一致)



常見修飾子搭配範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 抽象類別,不能 new,但可以有已實作或抽象方法
public abstract class Animal {
public abstract void makeSound(); // 抽象方法,子類必須實作

public void eat() {
System.out.println("Animal is eating.");
}
}

// 子類別繼承並實作抽象方法
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark!");
}
}



靜態與常數變數示範

1
2
3
4
5
6
7
public class MathUtil {
public static final double PI = 3.14159; // 常數

public static int doubleNumber(int x) {
return x * 2; // 靜態方法可直接用類別名呼叫
}
}

使用範例:

1
2
3
4
5
6
public class Main {
public static void main(String[] args) {
System.out.println(MathUtil.PI); // 3.14159
System.out.println(MathUtil.doubleNumber(5)); // 10
}
}



synchronized 與 volatile 示範(之後學即可)

1
2
3
4
5
6
7
8
9
10
11
public class Counter {
private volatile int count = 0;

public synchronized void increment() {
count++;
}

public int getCount() {
return count;
}
}
  • volatile 確保讀到最新值;synchronized 確保同時只有一個執行緒可以進入方法。



transient 示例(之後學即可)

1
2
3
4
5
6
7
8
import java.io.*;

class User implements Serializable {
private String name;
private transient String password; // 此欄位不會被序列化

// 建構子與其他方法略
}



修飾子使用限制整理

修飾子 類別 方法 變數 區塊
public
private
protected
static
final
abstract
synchronized
volatile
transient
native
strictfp