天天看點

day05java方法概述

    • 1. 方法概述
      • 1.1 方法的概念(了解)
    • 2. 方法的定義和調用
      • 2.1 無參數方法定義和調用(掌握)
      • 2.2 方法調用過程圖解(了解)
      • 2.3 無參數方法的練習(應用)
    • 3. 帶參數方法定義和調用
      • 3.1 帶參數方法定義和調用(掌握)
      • 3.2 形參和實參(了解)
      • 3.3 帶參數方法練習(應用)
    • 4. 帶傳回值方法的定義和調用
      • 4.1 帶傳回值方法定義和調用(掌握)
      • 4.2 帶傳回值方法練習(應用)
    • 5. 方法的注意事項
      • 5.1 方法的注意事項(掌握)
      • 5.2 方法的通用格式(掌握)
    • 6. 方法重載
      • 6.1 方法重載(了解)
      • 6.2 方法重載練習(掌握)
    • 7. 方法的參數傳遞
      • 7.1 方法參數傳遞基本類型(了解)
      • 7.2 方法參數傳遞引用類型(了解)
      • 7.3 數組周遊(應用)
      • 7.4 數組最大值(應用)

1. 方法概述

1.1 方法的概念(了解)

​ 方法(method)是将具有獨立功能的代碼塊組織成為一個整體,使其具有特殊功能的代碼集

  • 注意:
    • 方法必須先建立才可以使用,該過程成為方法定義
    • 方法建立後并不是直接可以運作的,需要手動使用後,才執行,該過程成為方法調用

2. 方法的定義和調用

2.1 無參數方法定義和調用(掌握)

  • 定義格式:
    public static void 方法名 (   ) {
    	// 方法體;
    }
               
  • 範例:
    public static void method (    ) {
    	// 方法體;
    }
               
  • 調用格式:
  • 範例:
  • 注意:

    ​ 方法必須先定義,後調用,否則程式将報錯

2.2 方法調用過程圖解(了解)

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-kwrqYTHb-1611037232049)(img\無參數方法調用圖解.png)]

  • 總結:每個方法在被調用執行的時候,都會進入棧記憶體,并且擁有自己獨立的記憶體空間,方法内部代碼調用完畢之後,會從棧記憶體中彈棧消失。

2.3 無參數方法的練習(應用)

  • 需求:設計一個方法用于列印兩個數中的較大數
  • 思路:
    • ①定義一個方法,用于列印兩個數字中的較大數,例如getMax()
    • ②方法中定義兩個變量,用于儲存兩個數字
    • ③使用分支語句分兩種情況對兩個數字的大小關系進行處理
    • ④在main()方法中調用定義好的方法
  • 代碼:
public class MethodTest {
    public static void main(String[] args) {
        //在main()方法中調用定義好的方法
        getMax();
    }

    //定義一個方法,用于列印兩個數字中的較大數,例如getMax()
    public static void getMax() {
        //方法中定義兩個變量,用于儲存兩個數字
        int a = 10;
        int b = 20;

        //使用分支語句分兩種情況對兩個數字的大小關系進行處理
        if(a > b) {
            System.out.println(a);
        } else {
            System.out.println(b);
        }
    }
}
           

3. 帶參數方法定義和調用

3.1 帶參數方法定義和調用(掌握)

  • 定義格式:

    參數:由資料類型和變量名組成 - 資料類型 變量名

    參數範例:int a

    public static void 方法名 (參數1) {
    	方法體;
    }
    
    public static void 方法名 (參數1, 參數2, 參數3...) {
    	方法體;
    }
               
  • 範例:
    public static void isEvenNumber(int number){
        ...
    }
    public static void getMax(int num1, int num2){
        ...
    }
               
    • 注意:
      方法定義時,參數中的資料類型與變量名都不能缺少,缺少任意一個程式将報錯
      
      方法定義時,多個參數之間使用逗号( ,)分隔
                 
  • 調用格式:
    方法名(參數);
    
    方法名(參數1,參數2);
               
  • 範例:
    isEvenNumber(10);
    
    getMax(10,20);
               
    • 方法調用時,參數的數量與類型必須與方法定義中的設定相比對,否則程式将報錯

3.2 形參和實參(了解)

  1. 形參:方法定義中的參數

​ 等同于變量定義格式,例如:int number

  1. 實參:方法調用中的參數

​ 等同于使用變量或常量,例如: 10 number

3.3 帶參數方法練習(應用)

  • 需求:設計一個方法用于列印兩個數中的較大數,資料來自于方法參數 }
  • 思路:
    • ①定義一個方法,用于列印兩個數字中的較大數,例如getMax()
    • ②為方法定義兩個參數,用于接收兩個數字
    • ③使用分支語句分兩種情況對兩個數字的大小關系進行處理
    • ④在main()方法中調用定義好的方法(使用常量)
    • ⑤在main()方法中調用定義好的方法(使用變量)
  • 代碼:
public class MethodTest {
    public static void main(String[] args) {
        //在main()方法中調用定義好的方法(使用常量)
        getMax(10,20);
        //調用方法的時候,人家要幾個,你就給幾個,人家要什麼類型的,你就給什麼類型的
        //getMax(30);
        //getMax(10.0,20.0);

        //在main()方法中調用定義好的方法(使用變量)
        int a = 10;
        int b = 20;
        getMax(a, b);
    }

    //定義一個方法,用于列印兩個數字中的較大數,例如getMax()
    //為方法定義兩個參數,用于接收兩個數字
    public static void getMax(int a, int b) {
        //使用分支語句分兩種情況對兩個數字的大小關系進行處理
        if(a > b) {
            System.out.println(a);
        } else {
            System.out.println(b);
        }
    }
}
           

4. 帶傳回值方法的定義和調用

4.1 帶傳回值方法定義和調用(掌握)

  • 定義格式
    public static 資料類型 方法名 ( 參數 ) { 
    	return 資料 ;
    }
               
  • 範例
    public static boolean isEvenNumber( int number ) {           
    	return true ;
    }
    public static int getMax( int a, int b ) {
    	return  100 ;
    }
               
    • 注意:
      • 方法定義時return後面的傳回值與方法定義上的資料類型要比對,否則程式将報錯
  • 調用格式
    方法名 ( 參數 ) ;
    資料類型 變量名 = 方法名 ( 參數 ) ;
               
  • 範例
    isEvenNumber ( 5 ) ;
    boolean  flag =  isEvenNumber ( 5 ); 
               
    • 注意:
      • 方法的傳回值通常會使用變量接收,否則該傳回值将無意義

4.2 帶傳回值方法練習(應用)

  • 需求:設計一個方法可以擷取兩個數的較大值,資料來自于參數
  • 思路:
    • ①定義一個方法,用于擷取兩個數字中的較大數
    • ②使用分支語句分兩種情況對兩個數字的大小關系進行處理
    • ③根據題設分别設定兩種情況下對應的傳回結果
    • ④在main()方法中調用定義好的方法并使用變量儲存
    • ⑤在main()方法中調用定義好的方法并直接列印結果
  • 代碼:
    public class MethodTest {
        public static void main(String[] args) {
            //在main()方法中調用定義好的方法并使用變量儲存
            int result = getMax(10,20);
            System.out.println(result);
    
            //在main()方法中調用定義好的方法并直接列印結果
            System.out.println(getMax(10,20));
        }
    
        //定義一個方法,用于擷取兩個數字中的較大數
        public static int getMax(int a, int b) {
            //使用分支語句分兩種情況對兩個數字的大小關系進行處理
            //根據題設分别設定兩種情況下對應的傳回結果
            if(a > b) {
                return a;
            } else {
                return b;
            }
        }
    }
               

5. 方法的注意事項

5.1 方法的注意事項(掌握)

  • 方法不能嵌套定義
    • 示例代碼:
      public class MethodDemo {
          public static void main(String[] args) {
      
          }
      
          public static void methodOne() {
      		public static void methodTwo() {
             		// 這裡會引發編譯錯誤!!!
          	}
          }
      }
                 
  • void表示無傳回值,可以省略return,也可以單獨的書寫return,後面不加資料
    • 示例代碼:
      public class MethodDemo {
          public static void main(String[] args) {
      
          }
          public static void methodTwo() {
              //return 100; 編譯錯誤,因為沒有具體傳回值類型
              return;	
              //System.out.println(100); return語句後面不能跟資料或代碼
          }
      }
                 

5.2 方法的通用格式(掌握)

  • 格式:
    public static 傳回值類型 方法名(參數) {
       方法體; 
       return 資料 ;
    }
               
  • 解釋:
    • public static 修飾符,目前先記住這個格式

      傳回值類型 方法操作完畢之後傳回的資料的資料類型

      ​ 如果方法操作完畢,沒有資料傳回,這裡寫void,而且方法體中一般不寫return

      方法名 調用方法時候使用的辨別

      參數 由資料類型和變量名組成,多個參數之間用逗号隔開

      方法體 完成功能的代碼塊

      return 如果方法操作完畢,有資料傳回,用于把資料傳回給調用者

  • 定義方法時,要做到兩個明确
    • 明确傳回值類型:主要是明确方法操作完畢之後是否有資料傳回,如果沒有,寫void;如果有,寫對應的資料類型
    • 明确參數:主要是明确參數的類型和數量
  • 調用方法時的注意:
    • void類型的方法,直接調用即可
    • 非void類型的方法,推薦用變量接收調用

6. 方法重載

6.1 方法重載(了解)

  • 方法重載概念

    方法重載指同一個類中定義的多個方法之間的關系,滿足下列條件的多個方法互相構成重載

    • 多個方法在同一個類中
    • 多個方法具有相同的方法名
    • 多個方法的參數不相同,類型不同或者數量不同
  • 注意:
    • 重載僅對應方法的定義,與方法的調用無關,調用方式參照标準格式
    • 重載僅針對同一個類中方法的名稱與參數進行識别,與傳回值無關,換句話說不能通過傳回值來判定兩個方法是否互相構成重載
  • 正确範例:
    public class MethodDemo {
    	public static void fn(int a) {
        	//方法體
        }
        public static int fn(double a) {
        	//方法體
        }
    }
    
    public class MethodDemo {
    	public static float fn(int a) {
        	//方法體
        }
        public static int fn(int a , int b) {
        	//方法體
        }
    }
               
  • 錯誤範例:
    public class MethodDemo {
    	public static void fn(int a) {
        	//方法體
        }
        public static int fn(int a) { 	/*錯誤原因:重載與傳回值無關*/
        	//方法體
        }
    }
    
    public class MethodDemo01 {
        public static void fn(int a) {
            //方法體
        }
    } 
    public class MethodDemo02 {
        public static int fn(double a) { /*錯誤原因:這是兩個類的兩個fn方法*/
            //方法體
        }
    }
               

6.2 方法重載練習(掌握)

  • 需求:使用方法重載的思想,設計比較兩個整數是否相同的方法,相容全整數類型(byte,short,int,long)
  • 思路:
    • ①定義比較兩個數字的是否相同的方法compare()方法,參數選擇兩個int型參數
    • ②定義對應的重載方法,變更對應的參數類型,參數變更為兩個long型參數
    • ③定義所有的重載方法,兩個byte類型與兩個short類型參數
    • ④完成方法的調用,測試運作結果
  • 代碼:
    public class MethodTest {
        public static void main(String[] args) {
            //調用方法
            System.out.println(compare(10, 20));
            System.out.println(compare((byte) 10, (byte) 20));
            System.out.println(compare((short) 10, (short) 20));
            System.out.println(compare(10L, 20L));
        }
    
        //int
        public static boolean compare(int a, int b) {
            System.out.println("int");
            return a == b;
        }
    
        //byte
        public static boolean compare(byte a, byte b) {
            System.out.println("byte");
            return a == b;
        }
    
        //short
        public static boolean compare(short a, short b) {
            System.out.println("short");
            return a == b;
        }
    
        //long
        public static boolean compare(long a, long b) {
            System.out.println("long");
            return a == b;
        }
    
    }
               

7. 方法的參數傳遞

7.1 方法參數傳遞基本類型(了解)

  • 測試代碼:
    public class ArgsDemo01 {
        public static void main(String[] args) {
            int number = 100;
            System.out.println("調用change方法前:" + number);
            change(number);
            System.out.println("調用change方法後:" + number);
        }
    
        public static void change(int number) {
            number = 200;
        }
    }
    
               
  • 結論:
    • 基本資料類型的參數,形式參數的改變,不影響實際參數
  • 結論依據:
    • 每個方法在棧記憶體中,都會有獨立的棧空間,方法運作結束後就會彈棧消失

      [外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-SjbIZiXw-1611037232066)(img\方法傳參-基本資料類型.png)]

7.2 方法參數傳遞引用類型(了解)

  • 測試代碼:
    public class ArgsDemo02 {
        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;
        }
    }
    
               
  • 結論:
    • 對于引用類型的參數,形式參數的改變,影響實際參數的值
  • 結論依據:
    • 引用資料類型的傳參,傳入的是位址值,記憶體中會造成兩個引用指向同一個記憶體的效果,是以即使方法彈棧,堆記憶體中的資料也已經是改變後的結果

      [外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-7Mft0xkg-1611037232068)(img\方法傳參-引用資料類型.png)]

7.3 數組周遊(應用)

  • 需求:設計一個方法用于數組周遊,要求周遊的結果是在一行上的。例如:[11, 22, 33, 44, 55]
  • 思路:
    • ①因為要求結果在一行上輸出,是以這裡需要在學習一個新的輸出語句System.out.print(“内容”);

      System.out.println(“内容”); 輸出内容并換行

      System.out.print(“内容”); 輸出内容不換行

      System.out.println(); 起到換行的作用

    • ②定義一個數組,用靜态初始化完成數組元素初始化
    • ③定義一個方法,用數組周遊通用格式對數組進行周遊
    • ④用新的輸出語句修改周遊操作
    • ⑤調用周遊方法
  • 代碼:
    public class MethodTest01 {
        public static void main(String[] args) {
            //定義一個數組,用靜态初始化完成數組元素初始化
            int[] arr = {11, 22, 33, 44, 55};
    
            //調用方法
            printArray(arr);
        }
    
        //定義一個方法,用數組周遊通用格式對數組進行周遊
        /*
            兩個明确:
                傳回值類型:void
                參數:int[] arr
         */
        public static void printArray(int[] arr) {
            System.out.print("[");
            for(int x=0; x<arr.length; x++) {
                if(x == arr.length-1) {
                    System.out.print(arr[x]);
                } else {
                    System.out.print(arr[x]+", ");
                }
            }
            System.out.println("]");
        }
    }
               

7.4 數組最大值(應用)

  • 需求:設計一個方法用于擷取數組中元素的最大值
  • 思路:
    • ①定義一個數組,用靜态初始化完成數組元素初始化
    • ②定義一個方法,用來擷取數組中的最大值,最值的認知和講解我們在數組中已經講解過了
    • ③調用擷取最大值方法,用變量接收傳回結果
    • ④把結果輸出在控制台
  • 代碼:
    public class MethodTest02 {
        public static void main(String[] args) {
            //定義一個數組,用靜态初始化完成數組元素初始化
            int[] arr = {12, 45, 98, 73, 60};
    
            //調用擷取最大值方法,用變量接收傳回結果
            int number = getMax(arr);
    
            //把結果輸出在控制台
            System.out.println("number:" + number);
        }
    
        //定義一個方法,用來擷取數組中的最大值
        /*
            兩個明确:
                傳回值類型:int
                參數:int[] arr
         */
        public static int getMax(int[] arr) {
            int max = arr[0];
    
            for(int x=1; x<arr.length; x++) {
                if(arr[x] > max) {
                    max = arr[x];
                }
            }
            return max;
        }
    }