方法是 Java 程式碼復用的基本單元,掌握方法的定義語法、參數機制與返回值處理是編寫高質量代碼的基石。本文將從語法結構、修飾符、參數傳遞、重載等核心概念展開詳細講解。
一個標準的 Java 方法聲明包含以下六個部分:
<修飾符> <返回類型> <方法名>(<參數列表>) <方法體>
public(公開)、protected(受保護)、private(私有)、默認(包可見)static(靜態)、final(不可重寫)、abstract(抽象)、synchronized(同步)、native(本地)int、double、boolean 等String、List<T>、自定義類等void:表示無返回值calculateTotalPrice)類型 參數名,以逗號分隔包含具體業務邏輯的代碼塊,若有返回類型必須以 return 值 結束。
/**
* 計算年齡
* @param birthYear 出生年份
* @return 當前年齡
*/
public static int calculateAge(int birthYear) {
int currentYear = Year.now().getValue();
return currentYear - birthYear;
}
/**
* 計算複利
* @param principal 本金
* @param rate 年利率(如 0.05 表示 5%)
* @param years 年數
* @return 本利和
*/
public static double compoundInterest(double principal, double rate, int years) {
return principal * Math.pow(1 + rate, years);
}
public class MathUtils {
// 兩整數求最大值
public static int max(int a, int b) {
return a > b ? a : b;
}
// 三整數求最大值
public static int max(int a, int b, int c) {
return max(max(a, b), c);
}
// 兩浮點數求最大值
public static double max(double a, double b) {
return a > b ? a : b;
}
}
Java 採用值傳遞機制,這點至關重要:
public void modifyPrimitive(int value) {
value = 20; // 只修改副本
}
public static void main(String[] args) {
int num = 10;
modifyPrimitive(num);
System.out.println(num); // 輸出 10,原值未變
}
public void modifyObject(StringBuilder sb) {
sb.append(" World"); // 修改對象內部狀態
sb = new StringBuilder("New"); // 修改引用指向,不影響外部
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
modifyObject(sb);
System.out.println(sb); // 輸出 "Hello World"
}
核心結論:方法接收的是引用的副本,可以修改對象內部狀態,但無法改變外部引用指向的對象。
public static double average(double... numbers) {
if (numbers.length == 0) return 0;
double sum = 0;
for (double n : numbers) sum += n;
return sum / numbers.length;
}
// 調用方式
average(1, 2, 3); // 2.0
average(new double[]{1,2,3}); // 2.0
public static void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
get/set/is/calculate/process)Exception,文檔說明拋出條件static| 錯誤類型 | 錯誤代碼 | 正確做法 |
|---|---|---|
| 構造方法有返回類型 | public void User() {} | public User() {} |
| void 方法返回值 | void foo() { return 1; } | 移除 return 值或改返回類型 |
| 非 void 缺少 return | int foo() { if(x>0) return 1; } | 所有路徑必須返回值 |
| 參數名與字段名衝突 | void setName(String name) { name = name; } | 使用 this.name = name |
掌握方法定義的精髓,能讓你的代碼更加模組化、可測試、易維護。建議在實際項目中多練習重構大方法為小方法,體會「高內聚、低耦合」的設計哲學。