天天看點

Java入門:Day05—方法Day05—方法

Day05—方法

1、成員方法

在程式開發中重複代碼的定義,為了友善這些重複的代碼,通過方法來儲存,實作重複地調用。

通路修飾符  傳回值資料類型  方法名(參數清單(資料類型 變量名1,資料類型 變量名2……){
        方法體(程式)
        [return;]  //帶傳回值方法定義(定義時return後面的傳回值與方法定義時的資料類型要比對)
    }
           

2、方法調用格式

(1)不帶參方法的定義和調用
public class Test{
        public static void main(String[] args){
            //調用方法
            isNumber();
        }
        //定義方法
        public static void isNumber(){
             int num = 10;
             //判斷10是否為偶數
             if(num % 2 ==0){
                 System.out.println("true");
             }else{
                 System.out.println("false");
             }
        }
}
           
(2)帶參方法的定義和調用
public class Test{
        public static void main(String[] args){
            //常量值的調用方法
            isNumber(10);
            //變量值的調用方法
            int num = 9;
            isNumber(num);
        }
        //定義帶一個參數的方法
        public static void isNumber(int num){
             //判斷是否為偶數
             if(num % 2 ==0){
                 System.out.println("true");
             }else{
                 System.out.println("false");
             }
        }
    }
           
(3)帶傳回值方法的定義和調用
public class Test{
        public static void main(String[] args){
            //1、方法名(參數)——一般沒有意義,不推薦
            isNumber(10);
            //2、資料類型 變量名 = 方法名(參數);
            boolean flag = isNumber(10); //判斷完成後相當于 boolean flag = true
            System.out.print(flag);
            
            //System.out.print(isNumber(10));  不要變量接收,直接輸出,一般不推薦
        }
        //定義帶傳回值的方法
        public static void isNumber(int num){
             //判斷是否為偶數
             if(num % 2 ==0){
                 return true;
             }else{
                 return false;
             }
        }
    }
           
(4)方法特點
①方法必須先定義再調用,否則程式将報錯。

②方法調用時,參數數量與類型必須與方法定義中的設定相比對,否則程式将報錯。

③方法不能嵌套定義。

④void表示無傳回值,可以省略return,也可以單獨書寫return,後面不加資料。

⑤調用方法時,void類型的方法直接調用即可;非void類型的方法,推薦使用變量接收調用。
           

3、形參和實參

(1)形參

方法定義中的參數,等同于變量定義格式。

(2)實參:

方法調用中的參數,等同于使用變量或常量。

4、可變參數

public int method(int...data){ //調用時可以直接傳遞一個數組
            int sum = 0;
            for (int i = 0; i < data.length; i++) {
               sum += data[i];
            }
            return sum;
     }

    public int method(String name,int age,int...data){ //在使用中,前兩個參數必須傳遞,可變的參數根據需求進行傳遞
            int sum = 0;
            for (int i = 0; i < data.length; i++) {
                sum += data[i];
            }
            return sum;
    }
           

5、方法重載

(1)定義

方法名重用的一種技術形式。 一個方法不能滿足要求,需要定義多個不同名稱的方法。

(2)特點

在同一類中,方法名相同,參數的類型或個數不同,跟傳回值沒有關系。

public class Test{
        public static void main(String[] args){
            int result1 = sum(10,20);
            System.out.print(result1);
            
            int result2 = sum(10,20,30);
            System.out.print(result2);
            
            double result3 = sum(10.0,20.0,30.5);
            System.out.print(result3);
        }
        //方法重載
    	public static int sum(int x,int y){
            return x + y;
        }
    
        public static int sum(int x,int y,int z){
            return x + y + z;
        }
    
        public static double sum(double x,double y,double z){  //doulbe --->int
            return x + y + z;
        }
     }
           

6、方法的參數傳遞

(1)方法參數傳遞(基本資料類型)

形參的改變,不影響實參的值

public class Test3 {
        public static void main(String[] args) {
            int num = 100;
            System.out.println("調用change方法前:"+num);
            change(num);	//形參的改變,不影響實參的值
            System.out.println("調用change方法後:"+num);
        }
        public static void change(int num){
            num = 200;
        }
    }
           
(2)方法參數傳遞(引用資料類型)

形參的改變,影響實參的值

public static void main(String[] args) {
            int[] arr = {10,20,30};
            System.out.println("調用change方法前:"+arr[1]);
            change(arr);	//形參的改變,不影響實參的值
            System.out.println("調用change方法後:"+arr[1]);
    }
    public static void change(int[] arr){
            arr[1] = 200;
    }
           

7、方法的遞歸

是一種特殊方法嵌套調用形式,自己調用自己。是一層層帶入,再一層層帶出。

注意:

①遞歸調用必須有結束條件;

②每次調用的時候都需要改變傳遞的參數内容

③遞歸方法影響程式的性能,使用遞推方式   
           
//計算階乘  1! + 2!  + 3! + 4! + 5!
public class TestRecursion {
    public int factorial(int num) { //實作階乘的方法
        if (num == 1) {
            return 1;
        }
        return num * factorial(num - 1);
    }

    public int sum(int num){
        if(num == 1){
            return 1;
        }
        return factorial(num) + sum(num - 1); //5! + sum(4)  4! + sum(3)
    }

    public static void main(String[] args) {
        TestRecursion testRecursion = new TestRecursion();
        System.out.println(testRecursion.sum(5)); //153
    }
}
           

8、構造方法

(1)定義

是一種特殊的方法,與類名相同,沒有傳回值 ,不能寫void,寫了void就變成普通方法了。

(2)作用

建立對象時給成員屬性進行初始化。

通路修飾符 類名(參數清單){
        構造方法體;
    }
           
注意:

①構造方法在建立對象時被自動調用,當沒有自己定義構造方法時,編譯器會提供一個無參構造方法。

②一個類中至少要有一個構造方法。

③當定義了構造方法時,編譯器不會再提供一個預設的無參數構造方法。