1. 程式人生 > >5、方法的定義與使用

5、方法的定義與使用

方法的定義與使用

方法的基本概念

  1. 方法就是一段可重複使用的程式碼塊。所以當要反覆執行一段程式碼時,可考慮將這段程式碼定義為方法。本章中的方法指的是定義在主類中,由主方法直接呼叫的方法。此類方法的語法:
public static 返回值型別 method_name(v_type v1, v_type v2,...) {
    方法體; // 方法要進行的若干操作
    [return [返回值] ;] // []中內容可忽略
}

返回值型別:

資料型別(基本資料型別、引用資料型別) 無返回值(void)
如果方法設定了返回值型別,那麼必須使用return返回與之型別對應的內容 不需要return語句,但可用return結束方法呼叫
  1. 方法名的命名規則:第一個單詞小寫,隨後每個單詞首字母大寫
    範例:定義無參無返回值方法
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        print(); // 直接呼叫
    }
    
    public static void print
(){ System.out.println("無參無返回值方法"); } }

範例:定義含參無返回值方法

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        compare(10.2); // 呼叫時必須寫入引數
        compare(-10.2);
    }

    public static void compare(double x){
        String str = x > 0.0 ? "這是正數"
:"這是負數"; System.out.println(str); } }

有了引數後,方法就可以根據不同的引數內容進行資料的處理。
範例:定義含引數有返回值方法

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        //定義變數接收返回值,而後輸出
        int result = add(10, 20);
        System.out.println(result);
        // 直接輸出返回值
        System.out.println(add(10, 20));
    }

    public static int add(int x, int y) {
        return x + y;
    }
}
  1. 一個方法使用void定義,該方法無法使用return返回值,但可以使用return結束呼叫。
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        print(1100); // x = 1100
        print(3); // 結束呼叫,不輸出x
    }

    public static void print(int x) {
        if (x == 3) {
            System.out.println("結束呼叫,不輸出x");
            return;
        }
        System.out.println("x = " + x);
    }
}

只有返回值型別為void時,才可使用return結束方法的呼叫。

方法過載

  1. 假設add()要執行兩個整數相加,也要執行三個整數相加和兩個小數相加,此時一個方法體無法實現所有功能,但又不能定義其他方法,就需要為add()定義不同的功能,該操作就稱為方法過載(overloading)
  2. 方法過載要求方法名一致,引數型別或個數不同
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        // 根據引數的個數或型別,呼叫不同方法
        add(10,20);
        add(10.2,20.2);
        add(10,20,30);
    }
    
    // 方法名相同,引數的型別或個數不同
    public static void add(int x, int y) {
        System.out.println("兩個整數相加:" + (x + y));
    }

    public static void add(double x, double y) {
        System.out.println("兩個小數相加:" + (x + y));
    }

    public static void add(int x, int y, int z) {
        System.out.println("三個整數相加:" + (x + y + z));
    }
}

System.out.println()可以輸出不同型別資料,可知此方法是一個被過載後的方法。

  1. 方法過載的說明:
    (1)雖然過載後的方法的返回值型別可以不同,但建議方法過載時返回值型別應一致;
    (2)方法過載是根據引數型別或個數的不同來區分呼叫,而不是根據返回值型別。
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
    }
    // 報錯,已在類中定義了方法 add(int,int)
    // 說明方法過載的依據是引數的個數或型別不同,而不是返回值型別不同
    public static int add(int x, int y) {
        return x + y;
    }

    public static double add(int x, int y) {
        return x + y;
    }
}

遞迴呼叫

  1. 遞迴呼叫是指方法呼叫自身。要實現遞迴呼叫,要有結束條件。遞迴呼叫應儘量少使用,因為處理不當會出現記憶體溢位。
    範例:遞迴實現1~100的累加操作
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        System.out.println(sum(100));
    }
    
    public static int sum(int num){
        if (num == 1) { // 結束遞迴呼叫
            return 1;
        }
        // 遞迴呼叫
        return num + sum(num - 1); 
    }
}

程式碼的執行步驟:

No. 內容 返回值
1 主方法呼叫sum(100) 100+sum(99)
2 遞迴呼叫sum(99) 100 + 99 + sum(98)
3 遞迴呼叫sum(98) 100 + 99 + 98+ sum(97)
依此類推
最後一次 遞迴呼叫sum(1) sum=100+99+98+…+2+1,結束遞迴