Java方法詳解

何謂方法?

  • System.out.println(),那麼它是什麼呢?
  • 回答:System是一個類,out是對象,println()是方法。調用系統類裏面的標準輸出對象out中的println方法
  • java 方法是語句的集合,他們在一起執行一個功能
    • 方法是解決一類問題的步驟的有序組合
    • 方法包含於類和對象中
    • 方法在程序中被創建,在其他地方被調用
  • 設計方法的原則:
    方法的本意是功能塊,就是實現某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性,就是一個方法只完成一個功能,這壓根看i與我們後期的擴展。
  • 回顧方法的命名規則

方法的定義

image

  • Java的方法類似於其他語言的函數,是一段用來完成特定功能的代碼片段,一般情況下,定義一個方法包含以下語法。
  • 方法包含一個方法頭和一個方法體,下面是一個方法的所有部分
    • 修飾符:修飾符,這是可選的,告訴編譯器如何讓調用該方法,定義了該方法稍微訪問類型。
    • 返回值類型:方法可能會有返回值,returnValueType是方法返回值的數據類型,有些方法執行做需要的操作,但沒有返回值,在這種情況下,returnValuType是關鍵字void。
    • 方法名:是方法的實際名稱,方法名和參數表共同構成方法簽名。
    • 參數類型:參數像一個佔位符,當方法被調用時,傳遞給參數,這個值被稱為實參或變量。參數列表是指方法的參數類型,順序和參數的個數。參數是可選的,方法可以不包含任何參數。
      • 形式參數:在方法被調用時用於接收外界輸入的數據。
      • 實參:調用方法實際傳給方法的數據。
    • 方法體:方法體包含具體的語句,定義該方法的功能。

方法調用

  • 調用方法:對象名.方法名(實參列表)
  • Java 支持兩種調用方法的方式,根據方法是否有返回值來選擇。
  • 當方法返回一個值得時候,方法調用通常被當作一個值。例如:
	int larger  = max(30,40);
  • 如果返回值時void,方法調用一定時一條語句。
	System.out.println("Hello,Hansuo!");
  • 課後拓展了解:值傳遞(Java)和引用傳遞

方法的重載

  • 重載就是在一個類中,有相同的函數名稱,但形參不同的函數。
  • 方法的重載的規則:
    • 方法名稱必須相同。
    • 參數列表必須不同(個數,或類型不同,參數排列順序不同等)。
    • 方法的返回類型可以實相同,也可以是不同的
    • 僅僅返回類型不同,不足以成為方法的重載
  • 實現理論
    • 方法名稱相同時,編譯器會根據調用的方法的參數個數,參數類型等去逐個匹配,以選對應的方法,如果匹配失敗,則編譯器報錯。

命令行傳參

  • 有時候你希望運行一個程序的時候再傳遞給它消息。這就要靠傳遞命令行參數給main()函數實現
public class Demo03 {
    public static void main(String[] args) {
        //args.length數組長度
        for (int i = 0; i < args.length ;i++){
            System.out.println("args["+ i + "]:" +args[i]);
        }
    }
}

image

可變參數

  • JDK 1.5開始,java支持同類型的可變參數給一個方法。
  • 在方法聲明中,在指定參數類型後加一個省略號(…)
  • 一個方法中只能指定一個可變參數,它必須是方法的最後一個參數。任何普通的參數必須在他之前聲明。
public class Demo04 {
    public static void main(String[] args) {
        //調用可變參數的方法
        printMax(34, 3, 2, 56.5);
        printMax(new double[]{1, 2, 3});
    }

    public static void printMax(double... number){
        if (number.length == 0){
            System.out.println("No argument passed");
            return;
        }
        double result = number[0];

        //排序
        for (int i = 0;i < number.length;i++){
            if (number[i]> result){
            result = number[i];
             }
        }
        System.out.println("The ax alue is " + result);
    }

image

遞歸

  • A方法調用B方法,我們神容易理解!
  • 遞歸就是:A方法調用A方法!就是自己調用自己
  • 利用遞歸可以用簡單的程序來解決一些複雜的問題。它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可以描述出接替過程許哦需要的多次重複計算,大大的減少了程序的代碼量。遞歸的能力在於有限的語句來定義對象的無限集合。
  • 遞歸結構包括兩個部分:
    • 遞歸頭:什麼時候不調用自身方法。如果沒有頭,靠美化下買入死循環。
    • 遞歸體:什麼時候需要調用自身方法。
//求階層
    public static void main(String[] args) {
        System.out.println(f(5));

    }


    public static int f(int n){

        if (n==1){
            return 1;
        }else {
            return n*f(n-1);
        }
    }

image