class BB {
public void print1() {
int[] arr = {1,2,3,4};
for(int i : arr) { AA.sop(i); }
Arrays.sort(arr); // 錯誤 1
}
public void print2() {
int x = 4;
}
AA.sop(x); // 錯誤 2
}
Arrays.sort(arr) 寫在方法體之外、類別體內,屬於「宣告位置」,只能放欄位宣告、方法宣告、初始化區塊。執行陳述式必須在方法/建構子/靜態區塊內。
✅ 修正:移入 print1() 方法內,或寫在實例初始化區塊 { Arrays.sort(arr); }(但 arr 必須是欄位)。
x 是 print2() 的區域變數,作用域僅限該方法內。類別體直接呼叫 AA.sop(x) 看不見 x,編譯器報「找不到符號」。
✅ 修正:將 x 提升為欄位 private int x = 4;,或在 print2() 內呼叫 AA.sop(x)。
int[] arr1 = {3,1,2};
Arrays.sort(arr1); // 這行在 main 方法內!
參考碼的 Arrays.sort(arr1) 寫在 main 方法裡,屬合法執行陳述式位置。
| 位置 | 可放內容 | 範例 |
|---|---|---|
| 類別體 | 欄位、方法、建構子、初始化區塊 | int x; void foo(){} {x=1;} |
| 方法體 | 執行陳述式、區域變數宣告 | int y=2; System.out.println(y); |
| 區域變數作用域 | 從宣告處到所在區塊結尾 | { int z=3; } // z 在此失效 |
Illegal start of expression」或「Cannot find symbol」,按提示移動程式碼即可。