根據使用慣例和術語,STR1 和 str2、STR4 可被稱為「全域變數」或「全域靜態變數」, 因為它們都是在類別範圍內聲明的靜態變數。 這意味著它們可以在類別中的任何位置訪問, 並且可以在程式的其他部分(例如不同的方法)中使用。 然而,STR3 則不是全域變數,而是「實例變數」或「物件變數」。 它僅與類的每個實例或物件相關聯,在使用它之前需要創建類的物件。 不過其實「全域變數」(global variables)這個術語在 Java 中並不常用, 因為 Java 中的變數通常是在類的範圍內定義的,而不是在整個程式的全域範圍內。 然而,根據上下文和使用情境,有時候可以將 STR1 和 str2、STR4 稱為「全域變數」, 以表示它們是在整個類中可訪問的變數。 總結來說,STR1 和 str2、STR4 都可以被稱為「全域變數」或「全域靜態變數」, 而 str3 是一個實例變數或物件變數。 ```java public class ExampleVariable3 { /* * STR1 是一個 public static final 變數,稱為「常數」或「靜態常數」。 * 它個 public, 公開的(可以從任何地方訪問)、 * 也是 static, 靜態的(屬於類而不是物件) * 以及 final, 不可變的(不能修改其值)變數。 * 常數通常用『全大寫字母』命名,並且在程式中提供一個固定的值。 * * 靜態常數通常拿來存放不會再更改的值,像是 PI,或者一些固定的檔案路徑等等。 */ public static final String STR1 = "it's str1"; /* * str2 是一個 public static 變數,稱為「靜態變數」或「類變數」。 * 它是一個 public, 公開的(可以從任何地方訪問) * 和 static, 靜態的(屬於類而不是物件)變數。 * 靜態變數與類相關聯,而不是與類的每個實例相關聯。 * 因為這不是常數,所以照一般的命名規則即可。 */ public static String str2 = "it's str2"; /* * str3 是一個沒有使用關鍵字進行聲明的變數。根據它的聲明位置, * 它可能是一個實例變數或物件變數。 * 這個變數只能通過創建類的物件來訪問。 * 可以稱呼它為「實例變數」或「物件變數」,表示屬於類的每個實例或物件的一部分。 * 因為這不是常數,所以照一般的命名規則即可。 */ public String str3 = "it's str3"; /* * 這邊的 STR4 所有設定都如 STR1 一樣,只差在沒有直接賦值。 * 但如果用靜態初始化區塊,就可以在區塊內對 final 變數進行唯一一次的變動。 */ public static final String STR4; static { STR4 = "it's str4"; //STR1 = "edit me"; //錯誤,已經無法修改 STR1 } public static void test1() { System.out.println(STR1); System.out.println(str2); //str3 因為不是靜態變數,所以無法在靜態方法內呼叫 //System.out.println(str3); } private String test2() { System.out.println(STR1); System.out.println(str2); System.out.println(str3); return ""; } public static void main(String[] args) { test1(); ExampleVariable testClass = new ExampleVariable(); testClass.test2(); System.out.println(STR1); System.out.println(str2); //main 本身也是一個靜態方法,所以無法直接取用 str3 //System.out.println(str3); //必須先實例化類別之後才能取用物件變數 System.out.println(testClass.str3); //STR1 是個常數(加上 final),所以無法再修改他 //STR1 = "test string"; str2 = "test string"; testClass.str3 = "test string"; } } ```