凱哥帶你從零學大數據系列之Java篇---第四章:方法

溫馨提示:如果想學紮實,一定要從頭開始看凱哥的一系列文章(凱哥帶你從零學大數據系列),千萬不要從中間的某個部分開始看,知識前後是有很大關聯,否則學習效果會打折扣.

系列文章第一篇是擁抱大數據:凱哥帶你從零學大數據系列-學習大數據前奏(必讀)(點我)!

上一篇:擁抱大數據:凱哥帶你從零學大數據系列之Java篇---第三章:流程控制

課程重點:

  • 方法的定義與調用
  • 方法的參數使用
  • 方法的返回值使用
  • 方法的重載

4.1. 方法的簡介

4.1.1. 方法的概念

在程序中, 有些情況下, 有些代碼是需要被多次執行的。 如果需要在每次使用到這些邏輯的時候, 都去寫代碼實現, 此時代碼將會非常的冗餘, 不利於維護。

此時, 我們可以將這些需要被多次執行的邏輯單獨包裝起來, 在需要的時候直接調用即可。

方法, 就是爲了實現這個需求而存在的。

方法, 其實就是一個實現特定功能的代碼段, 方法中的邏輯可以被重複使用。

4.1.2. 爲什麼要使用方法

可以使用方法, 將需要多次執行的邏輯封裝起來, 哪裏需要, 哪裏直接調用即可。

降低了代碼的冗餘, 提高了代碼的複用性與維護性。

4.2. 方法的定義與調用

4.2.1. 方法的定義

[訪問權限修飾符] [其他的修飾符] 返回值類型 方法名字([參數列表]) {
	方法體
}
  • 訪問權限修飾符: 定義了方法的訪問權限。 訪問權限在面向對象部分講解, 這部分內容暫不寫。
  • 其他的修飾符: 定義了方法的其他的修飾。 這部分的修飾符, 在後續的課程中陸續講解。 這裏暫時先寫 static
  • 返回值類型: 返回值知識點在4.4中講解, 暫時先寫 void。
  • 方法名字: 遵循小駝峯命名法的標識符。
  • 參數列表: 將在4.3中講解, 暫時不寫。
  • 方法體: 需要封裝起來的, 可以被重複執行的代碼段。

4.2.2. 第一個方法

// 這個方法中, 封裝了一個九九乘法表的邏輯
// 哪裏需要輸出九九乘法表, 直接調用這個方法即可
static void display () {
   for(int line=1; line<=9; line++) {
       for(int colume=1; colume<=9; colume++) {
           System.out.print (colume+" x "+line+" = "+colume*line+"\t");
      }
       System.out.println ();
  }
}

4.2.3. 方法的調用

方法寫完後, 其中的邏輯並不會立即執行。 如果想讓程序中的邏輯執行, 需要調用方法。

調用方法, 直接使用方法的名字即可。

/**
* @Description 方法的調用
*/
public class Test {
   public static void main (String[] args) {
       // 方法的調用
       display ();
  }
   // 九九乘法表的邏輯
static void display () {
  for(int line=1; line<=9; line++) {
       for(int colume=1; colume<=9; colume++) {
           System.out.print (colume+" x "+line+" = "+colume * line+"\t");
      }
       System.out.println ();
  }
}
}

4.3. 方法的參數

4.3.1. 參數的概念

多數情況下, 方法與調用者之間需要進行數據的交互。 調用者必須提供必要的數據, 才能使用方法完成相應的功能。

例如:
ATM取款機, 封裝了取錢的功能。 用戶在使用ATM取款的時候, 需要插入銀行卡。 此時, 就是使用者與功能集的數據交互。
自動販賣機, 封裝了販賣的功能。 用戶在使用自動販賣機的時候, 需要選擇購買的物品。 此時, 也是使用者與功能集的數據交互。

調用方法的時候, 需要將一些數據傳入到方法中, 實現調用方與方法的數據交互。 這個被傳入到方法中的數據, 被稱爲是 參數

4.3.2. 參數的定義

參數定義在方法的小括號中, 與變量的定義類似, 使用 數據類型 標識符 的方式定義。

/**
* @Description 方法的調用
*/
public class Test {
   // 定義了一個打印若干個分隔符的方法, 數量由參數count定義。
   static void printSign (int count) {
       for(int i=0; i<count; i++) {
           System.out.print ("-");
      }
       System.out.println ();
  }
}

定義參數的注意事項:

  • 參數定義在方法的參數列表中, 使用 數據類型 標識符 的形式定義。
  • 如果需要定義多個參數, 多個參數之間以逗號分隔。
  • 參數在定義的時候, 不允許賦初始值。
  • 即便多個參數的類型都是相同的, 每一個參數也必須顯式的定義類型。

4.3.3. 有參方法的調用

在調用有參方法的時候, 必須給每一個參數進行賦值。 直接將這些值寫入到小括號裏面即可。

/**
* @Description 方法的調用
*/
public class Test{
   public static void main (String[] args) {
       System.out.println ("Hello,凱哥");
       printSign (10);// 將10給參數count進行賦值。
       System.out.println ("歡迎歡迎");
  }
   // 定義了一個打印若干個分隔符的方法, 數量由參數count定義。
   static void printSign (int count) {
       for(int i=0; i<count; i++) {
           System.out.print ("-");
      }
       System.out.println ();
  }
}

4.3.4. 幾個概念

  • 形參
    • 定義在方法的參數列表中, 這樣的參數只是一個形式。 在方法中並不知道這個參數的值是什麼, 只有在調用的時候才知道具體的值是多少。
    • 這樣的參數被稱爲 形式參數, 簡稱 形參

 

  • 實參
    • 定義在方法調用時候的小括號中。 這個參數是形參實際的值。
    • 這樣的參數被稱爲 實際參數, 簡稱 *實參

 

  • 傳參
    • 在調用方法的時候, 實參給形參進行賦值。 這個過程被稱爲 傳參

4.4. 方法的返回值

4.4.1. 返回值的概念

在進行方法調用的時候, 有些情況下是需要有邏輯執行結果的。

例如
ATM取款機, 用戶在取完錢之後, 一定是要能夠得到實際的錢的。 此時就是調用功能集得到的結果。

4.4.2. 返回值的定義

在前面定義方法的時候, 返回值類型部分, 寫的是 void。

void: 表示無, 沒有返回值。 表示這個方法沒有執行結果。

static int add (int a, int b) {
   return a+b;
}

注意事項

如果一個方法的返回值類型不是void, 則方法在執行結束之前, 必須要有return關鍵字返回一個結果。

4.4.3. return關鍵字

表示方法的執行結果。
return關鍵字後面跟上方法的執行結果, 這個值的類型, 必須和方法定義中的返回值類型一致。

static int add (int a, int b) {
 return a + b;// 將 a + b 的運算結果, 作爲整個方法的執行結果。
}
  • 表示結束方法的執行
    在一個返回值類型爲void的方法中, 也可以使用return關鍵字。 此時, return後面什麼都不要寫。
return寫在方法中, 表示結束方法的結束。
static int add (int a, int b) {
 return a + b;
 // return執行後, 後面的所有的代碼都不執行。
 // 方法結束。
}


4.5. 方法的重載

4.5.1. 重載的概念

在一個類的方法中, 如果多個方法滿足如下條件, 則他們之間的關係就是重載

  • 方法名相同
  • 參數不同
    • 參數不同, 體現在參數的數量不同或者參數的類型不同。
注意: 方法的重載, 與返回值沒有關係!

4.5.2. 重載方法的定義

/**
* @Description 方法的重載
*/
public class Test {
   static void calculate () {}
   static void calculate (int a) {}
   static void calculate (int a, int b) {}
   static String calculate (String x, String y) {
       return x + y;
  }
}

4.5.3. 重載方法的調用

調用重載方法的時候, 使用實參區分調用不同的方法。

/**
* @Description 方法的調用
*/
public class Test {
   static void calculate () {}
   static void calculate (int a) {}
   static void calculate (int a, int b) {}
   static String calculate (String x, String y) {
       return x + y;
  }
   
   public static void main (String[] args) {
       calculate ();// 無參的方法調用
       calculate (10);// calculate(int a) 方法的調用
       calculate (10, 20);// calculate(int a, int b) 方法的調用
       calculate ("a", "b");// calculate(String x, String y) 方法的調用
  }
}

4.6. 方法的遞歸

4.6.1. 遞歸是什麼

遞歸, 是一種程序設計的思想。 在解決問題的時候, 可以將問題拆分成若干個小問題。 通過解決這些小的問題, 逐漸解決這個大的問題。

4.6.2. 何時使用遞歸

  • 當需要解決的問題可以拆分成若干個小問題,大小問題的解決方法相同。
  • 有固定規律, 方法中調用自己。

4.6.3. 如何正確使用遞歸

遞歸, 由於涉及到方法的循環調用, 因此容易出現死遞歸的情況。 即所有的方法調用沒有出口, 只能將方法壓棧執行, 但是無法結束方法。

因此, 在使用遞歸的時候, 需要設置有效的出口條件, 避免無窮遞歸。

4.6.4. 遞歸的案例

/**
* @Description 遞歸
*/
public class Test {
   public static void main (String[] args) {
       // 計算5的階乘
       mutiply ( 5 );
  }
   static int mutiply (int number) {
       if(number == 1) {
           return 1;
      }
       return number * mutiply (number - 1);
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章