Java--方法的使用

慈雲數據 6個月前 (05-13) 技術支持 81 0

1.1什麽是方法

方法顧名思義就是解決問題的辦法,在程序員寫代碼的時候,會遇到很多邏輯結構一樣,解決相同問題時,每次都寫一樣的代碼,這會使代碼看起來比較絨餘,代碼量也比較多,爲了解決這個問題,我們把代碼邏輯相同的代碼寫成一個方法,當我們解決相同問題時,直接調用這個方法,這會使代碼看起來簡潔明了。

方法:在Java中就是一個代碼片段,與C語言中的函數類似。

方法存在的意義:

1. 是能夠模塊化的組織代碼(當代碼規模比較複雜的時候 ).

2. 做到代碼被重複使用, 一份代碼可以在多個位置使用.

3. 讓代碼更好理解更簡單.

4. 直接調用現有方法開發, 不必重複造輪子.

舉個列子:當我們需要求一個數的階乘時

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int x= scanner.nextInt();
        for (int i = x-1; i >=1 ; i--) {
            x*=i;
        }
        System.out.println(x);
    }

你可能會寫出這樣的代碼,是不是看見循環就煩,當我們學會方法就會寫出下面這種簡潔的代碼

   public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int x= scanner.nextInt();
        System.out.println(fac1(x));
    }

是不是看着簡潔多了

2.方法的基本格式

// 方法定義
public static 方法返回值 方法名稱([參數類型 形參 ...]){
 方法體代碼;
 [return 返回值];
}
// 方法調用
返回值變量 = 方法名稱(實參...);

接下來來個實例:

public static int fac1(int x){
    for (int i = x-1; i >=1 ; i--) {
        x*=i;
    }
    return x;
}
——————————————————————————————————————————————————
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int x= scanner.nextInt();
        System.out.println(fac1(x));
    }

橫線上面是方法的定義,下面是方法的調用;

注意事項

1. 方法定義時, 參數可以沒有. 每個參數要指定類型

2. 方法定義時, 返回值也可以沒有, 如果沒有返回值, 則返回值類型應寫成 void

3. 方法定義時的參數稱爲 "形參", 方法調用時的參數稱爲 "實參".

4. 方法的定義必須在類之中, 代碼書寫在調用位置的上方或者下方均可.

5. Java 中沒有 "函數聲明" 這樣的概念.

3.方法的執行過程

1.定義方法的時候, 不會執行方法的代碼. 隻有調用的時候才會執行.

2.當方法被調用的時候, 會将實參賦值給形參.

3.參數傳遞完畢後, 就會執行到方法體代碼.

4.當方法執行完畢之後(遇到 return 語句), 就執行完畢, 回到方法調用位置繼續往下執行. 

5.一個方法可以被多次調用.

4.實參和形參

在定義方法時,參數類型(形參)可以有多個或者一個也沒有

調用方法時傳遞的參數叫做實參,參數要與方法的形參匹配(參數的個數和類型)

形參是實參的一份臨時拷貝,即調用方法時創建,方法結束後銷毀

舉個例子:交換兩個數

public static void swap(int x,int y){
        int t=x;
        x=y;
        y=t;
}
    
    
    public static void main(String[] args) {
        int x=10;
        int y=20;
        System.out.println("交換前:x="+x+"y="+y);
        swap(x,y);
        System.out.println("交換後:x="+x+"y="+y);
    }

這樣寫結果是不是交換了呢?肯定不是

主要原因還是因爲形參隻是實參的一份臨時拷貝

那就沒辦法交換兩個數了呗,交換兩個數要傳引用數據類型

比如數組就是引用數據類型

    public static void swap1(int arr[]){
        int x=arr[0];
        arr[0]=arr[1];
        arr[1]=x;
    }
    public static void main(String[] args) {
        int []arr={1,2};
        System.out.println("交換前arr[0]="+arr[0]+" arr[1]="+arr[1]);
        swap1(arr);
        System.out.println("交換後arr[0]="+arr[0]+" arr[1]="+arr[1]);
    }

5.沒有返回值的方法

沒有返回值的方法即方法的返回值類型void

例如:

   public static void print(){
        System.out.println("hhhhhh");
    }
    
    public static void main(String[] args) {
        print();
    }

同時,剛才的交換兩個數也是沒有返回值的方法

如果想要在某個條件下提前結束方法,也可以在滿足條件後直接return

6.方法的重載

當我們想要一個函數的功能,實現多種參數時,我們就可以使用方法的重載

例子:

我們使用add方法時,即想實現兩個整形的相加,又想實現兩個double類型的相加,但是兩種方法都是用作加法,記方法名又太麻煩,所以我們會選擇重載

    public static int add(int x,int y){
        return x+y;
    }
    public static double add(double x,double y){
        return x+y;
    }
    public static void main(String[] args) {
        System.out.println(add(1,2));
        System.out.println(add(1.2,2.2));
    }

方法名都是add,方法名相同,但是實現的功能不同,就叫做方法的重載

重載的規則:

1.針對同一個類

2.方法名相同

3.方法的參數不同(參數個數或者參數類型)

4.方法的返回值類型不影響重載.

7.方法的遞歸

什麽是遞歸:

一個方法在執行過程中調用自身, 就稱爲 "遞歸"

經典例子:斐波那契數列

public static int fib1(int x){
        if(x==1||x==2){
            return 1;
        }
        else{
            return fib1(x-1)+fib1(x-2);
        }
}

求斐波那契數列的第幾個數時,這個數是前兩個斐波那契數之和,而第一個和第二個斐波那契數是1,再求第x個斐波那契數時,需要先求前兩個斐波那契數,當x爲1或2時,返回1

紅色箭頭代表遞的過程,藍色箭頭代表歸的過程

小結:

1.遞歸是一種重要的編程解決問題的方式.

2.有些問題天然就是使用遞歸方式定義的(例如斐波那契數列, 二叉樹等), 此時使用遞歸來解就很容易.

3.有些問題使用遞歸和使用非遞歸(循環)都可以解決. 那麽此時更推薦使用循環, 相比于遞歸, 非遞歸程序更加高效

微信掃一掃加客服

微信掃一掃加客服

點擊啓動AI問答
Draggable Icon