Java 方法 (Method)

方法是一段執行特定任務的程式碼區塊,可以重複使用。在其他程式語言中也稱為函式 (Function)。

定義方法

存取修飾詞 回傳型別 方法名稱(參數列表) {
    // 方法主體
    return 回傳值;  // 如果有回傳值
}

基本範例

public class Main {
    // 沒有參數,沒有回傳值
    public static void sayHello() {
        System.out.println("Hello!");
    }
    
    // 有參數,沒有回傳值
    public static void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }
    
    // 有參數,有回傳值
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static void main(String[] args) {
        sayHello();           // Hello!
        greet("Alice");       // Hello, Alice!
        
        int sum = add(5, 3);
        System.out.println(sum);  // 8
    }
}

方法組成

public static int multiply(int a, int b) {
    return a * b;
}
  • public:存取修飾詞
  • static:靜態方法(屬於類別)
  • int:回傳型別
  • multiply:方法名稱
  • int a, int b:參數列表
  • return a * b:回傳值

回傳型別

void(不回傳值)

public static void printMessage(String msg) {
    System.out.println(msg);
    // 不需要 return,或用 return; 提前結束
}

回傳基本型別

public static int square(int n) {
    return n * n;
}

public static double average(int a, int b) {
    return (a + b) / 2.0;
}

public static boolean isPositive(int n) {
    return n > 0;
}

回傳物件

public static String formatName(String first, String last) {
    return last + ", " + first;
}

public static int[] createArray(int size) {
    return new int[size];
}

參數

詳細說明請參考 Java 方法參數

多個參數

public static int max(int a, int b, int c) {
    return Math.max(Math.max(a, b), c);
}

// 呼叫
int result = max(10, 25, 15);  // 25

可變參數 (Varargs)

public static int sum(int... numbers) {
    int total = 0;
    for (int n : numbers) {
        total += n;
    }
    return total;
}

// 呼叫
sum(1, 2, 3);       // 6
sum(1, 2, 3, 4, 5); // 15
sum();              // 0

方法多載 (Overloading)

相同方法名稱,但參數不同:

public static int add(int a, int b) {
    return a + b;
}

public static double add(double a, double b) {
    return a + b;
}

public static int add(int a, int b, int c) {
    return a + b + c;
}

詳細說明請參考 Java 方法多載

遞迴

方法呼叫自己:

public static int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

// factorial(5) = 5 * 4 * 3 * 2 * 1 = 120

詳細說明請參考 Java 遞迴

static 方法 vs 實例方法

public class Calculator {
    // 靜態方法:用類別名稱呼叫
    public static int add(int a, int b) {
        return a + b;
    }
    
    // 實例方法:需要建立物件
    public int multiply(int a, int b) {
        return a * b;
    }
}

// 使用
int sum = Calculator.add(5, 3);  // 靜態方法

Calculator calc = new Calculator();
int product = calc.multiply(5, 3);  // 實例方法

實際應用

驗證方法

public static boolean isValidEmail(String email) {
    return email != null && 
           email.contains("@") && 
           email.contains(".");
}

public static boolean isValidPassword(String password) {
    return password != null && password.length() >= 8;
}

格式化方法

public static String formatCurrency(double amount) {
    return String.format("$%.2f", amount);
}

public static String formatPhone(String phone) {
    return phone.replaceFirst("(\\d{4})(\\d{3})(\\d{3})", "$1-$2-$3");
}

計算方法

public static double calculateArea(double radius) {
    return Math.PI * radius * radius;
}

public static double calculateBMI(double height, double weight) {
    return weight / (height * height);
}

方法命名規則

  • 使用 camelCase
  • 動詞開頭
  • 清楚描述功能
// 好的命名
public void calculateTotal() { }
public boolean isValid() { }
public String getName() { }
public void setAge(int age) { }

// 不好的命名
public void calc() { }  // 太短
public void doStuff() { }  // 不明確

良好實踐

  1. 單一職責:一個方法只做一件事
  2. 適當長度:方法不要太長,超過 20-30 行考慮拆分
  3. 有意義的名稱:方法名稱要清楚表達功能
  4. 參數數量:盡量不超過 3-4 個參數