方法 | 方法是什麼、方法的重載、方法的遞歸

一、什麼是方法
前面說過,我們有時候需要做重複的事情,於是把這些代碼寫進了循環語句中稱作循環體。現在,我們給這段循環語句起了名字,以後再需要使用這個循環體的時候,只需要調用循環語句的名字即可。
在上面的敘述中,被提取出來,起了名字的代碼塊就可以看做是程序中定義的方法。
我們還是用媽媽打小明的案例看一下。

//下面是不使用方法時,三個媽媽打小明不同的例子。
public class Example{
    public static void main (String [] args){
        //第一個
        for(休息次數=0;休息次數<2;休息次數++){
            for(媽媽打小明次數=0;媽媽打小明次數<50;媽媽打小明次數++){
                噼裏啪啦;
            }
        }
        //第二個
        for(休息次數=0;休息次數<3;休息次數++){
            for(媽媽打小明次數=0;媽媽打小明次數<30;媽媽打小明次數++){
                噼裏啪啦;
            }
        }
        //第三個
        for(休息次數=0;休息次數<4;休息次數++){
            for(媽媽打小明次數=0;媽媽打小明次數<40;媽媽打小明次數++){
                噼裏啪啦;
            }
        }
    }
}
//代碼寫的不適很嚴謹,也不會執行,但是是爲了好理解

我們不使用方法需要寫這麼多代碼,才能實現媽媽打三輪小明,那麼如果有了方法,上面的代碼會變成什麼樣子呢

public class Example01{
    public  static void main(String [] args){
        daxiaoming(2,50);//調用方法
        daxiaoming(3,30);
        daxiaoming(4,40);
    }
    public static void daxiaoming (int 休息次數,int 媽媽打小明次數){
        for(休息次數=0;休息次數<4;休息次數++){
            for(媽媽打小明次數=0;媽媽打小明次數<40;媽媽打小明次數++){
                噼裏啪啦;
            }
        }   
    }
}

我們會發現代碼少了很多,{ }內實現打小明的代碼是方法體;daxiaoming是方法名;休息次數,媽媽打小明次數是方法的參數;方法名前的void是方法的返回值類型
方法的具體格式如下

修飾符 返回值類型 方法名(【參數類型 參數名1,參數類型,參數名2,……】){
    執行語句
    ……
    ……
    return返回值;
}

這其中【 】內的參數可以加也可以不加,這要看你的方法是不是需要接受參數,不需要則不加,若不加即參數列表爲空,()內不需要寫任何代碼。
方法的返回值類型和return是一起使用的。如果沒有返回值類型,即返回值是void,則不需要return語句。若有返回值類型,則返回的返回值必須爲方法中聲明的返回值類型。

二、方法的重載

生活中有時候需要對不同的情況作出不同的反應,例如媽媽打小明休息次數不同,打的次數也不同。例如以前是休息三次,打三十次,現在是休息三次,打三十次,用拖鞋打。這時候如果變成代碼就會發現爲這兩種打小明的方法定義兩個不同的名字還可以接受,萬一媽媽創造了很多種,豈不是很麻煩?
於是我們有了方法的重載。即,java允許在一個程序中定義多個名城相同的方法,但是參數類型和個數必須不同,這就是方法的重載。
通過簡單的加法來看一下

public class Example02{
    public static void main (String [] args){
        //定義兩個變量用來進行儲存結果
        int sum1=add(1,2);
        int sum2=add(1,2,3);
        //輸出結果
        System.out.println("sum1="+sum1);
        System.out.println("sum2="+sum2);
    }
    public static int add(int x,int y){
        return x+y;
    }
    public static int add(int x,int y,int z){
        return x+y+z;
    }

}
//結果是sum1=3;sum2=6

上面的例子可以看出,雖然調用的方法名字是一樣的,但是實際參與計算的代碼卻不同。這是因爲java會自動對我們輸入的數進行匹配,從而爲我們選擇正確的代碼段執行。
需要注意的是 方法的重載和返回值類型是無關的,他只需要滿足兩個條件:①方法名相同②參數個數或者參數類型不同

三、方法的遞歸

方法的遞歸就是方法自己調用自己的過程。
遞歸必須要有結束條件,否則就會陷入無限遞歸的狀態。

public class Example03{
    public static void main (String [] args){
        int sum=getSum(4);//調用遞歸方法,獲得1~4的和
        System.out.println(getSum);//打印結果
    }
    public static int getSum(int n){
        if(n==1){
            //滿足條件,遞歸結束
            return 1;
        }
        int temp=getSum(n-1);
        return temp+n;
    }
}

下面來看一下代碼執行的步驟

①首先傳入的是4,不等於1,執行temp=getSum(4-1)即temp=getSum(3)
②然後返回temp+4 即getSum(3)+4
③因爲②中含有不明的getSum(3),所以要對getSum(3)再進行①中的運算,發現得到結果是getSum(2)+3,然後再對getSum(2)進行①中的運算,發現得到的結果是getSum(1)+2,然後再對getSum(1)進行代碼中的運算,發現getSum(1)=1。
④然後把每一步中的數字相加,即1+2+3+4=10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章