靜態方法屬於類而非實例,透過 類名.方法名() 直接呼叫,無需 new 物件。宣告語法:
訪問修飾符 static 返回型別 方法名(參數列表) {
// 方法體
}
| 類型 | 特徵 | 範例 |
|---|---|---|
| 無回傳值 | void,執行動作不產出資料 | 列印、排序、寫入檔案 |
| 有回傳值 | 具體型別,必須 return | 計算、查詢、轉換 |
| 無參數 | 參數列表為空 | 初始化、固定邏輯 |
| 有參數 | 接收外部資料 | 通用演算法、資料處理 |
版本 1:void + 陣列參數(引用傳遞,原地排序)
public static void bubble(int[] arr) {
for (int i = 0; i < arr.length - 1; i++)
for (int j = 0; j < arr.length - i - 1; j++)
if (arr[j] > arr[j + 1]) swap(arr, j, j + 1);
}
版本 2:回傳排序後陣列(鏈式呼叫友善)
public static int[] bubble(int[] arr) {
// ... 排序邏輯同版本 1
return arr; // 回傳同一參考
}
版本 3:方法復用與無參輔助方法
public static void show1() { System.out.print("排序前:"); }
public static void show2() { System.out.print("排序後:"); }
// 主流程
show1(); print(arr);
show2(); print(bubble(arr));
arr = new int[5])不影響外部。java.util.Arrays 提供陣列操作標準庫,核心方法:
| 方法 | 功能 | 範例 |
|---|---|---|
copyOf(arr, newLen) | 擴容/縮容複製 | Arrays.copyOf(arr, 10) |
copyOfRange(arr, from, to) | 區間複製 [from, to) | Arrays.copyOfRange(arr, 2, 5) |
equals(arr1, arr2) | 內容逐項比對 | 回傳 boolean |
fill(arr, val) | 全部填充指定值 | Arrays.fill(arr, -1) |
sort(arr) | 原地快速排序 | 雙軸快排,基本型別用 |
binarySearch(arr, key) | 二分查找(需先排序) | 回傳索引,找不到為 (-(插入點) - 1) |
toString(arr) | 陣列轉可讀字串 | [1, 2, 3] |
補充:System.arraycopy(src, srcPos, dest, destPos, len) 為底層高效複製,大量資料移動首選。
Java 二維陣列本質是「陣列的陣列」:
new int[3][] 僅分配 3 個引用槽位,第二維需逐個 new int[n]。// 靜態初始化:編譯期確定內容
int[][] arr1 = {{1,2}, {3,4,5}, {6,7,8,9}};
// 動態初始化:執行期構建鋸齒結構
String[][] arr2 = new String[3][];
arr2[0] = new String[2];
arr2[1] = new String[3];
arr2[2] = new String[4];
// 逐項賦值
arr2[0][0] = "abc00"; // ...
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) { // 必須用 arr[i].length
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
// Java 5+ 增強 for(僅讀取)
for (int[] row : arr) {
for (int val : row) System.out.print(val + " ");
System.out.println();
}
new int[3][4] vs new int[3][]:前者自動建立 3x4 矩形;後者需手動建立第二維。arr[i].length 隨行變化,不可寫死。int[][] copy = arr.clone() 僅複製第一維引用,修改 copy[0][0] 會影響原陣列。深拷貝需逐行 Arrays.copyOf。