Java 進階教學 : 方法的建立及呼叫

Java Road



好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。




好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。


方法的建立及呼叫

  方法的呼叫是載入執行返回的觀念。執行環境載入一個方法執行(假設為 A 方法),若這個方法 (A)的執行過程中,呼叫另外一個方法(假設為 B 方法)。執行環境會暫停目前這個方法 (A) 的執行,進而載入指定的方法 (B) 執行。等指定的方法 (B) 執行完畢,再返回原方法 (A) 執行。

Syntax:
methodType methodName(paramType paramName, .....){
   method body;
}
  1. 方法型別 (返迴型別) 與 return 敍述
  2. method type (return type) and return statement
    • not a void
    • not a void 代表任何型別,包含基本資料型別參考型別

      • 使用者角度

      • 呼叫這個方法來取得記憶體位址,例如:指定位置的值、指定運算的值、建立新物件....,總之這個方法會回饋一個值或記憶體位址。 

        換個角度,就是這個方法的呼叫敍述就代表它運算後的值或記憶體位址
        ,所以這個方法的呼叫敍述可以是任何敍述的一部份

      • 開發者角度

      • 這個方法必須回饋給使用者一個指定型別的值或物件的記憶體位址。

      • return statement

      • 方法中至少要有一個 return value; 的敍述,而 value 的型別必須是 method type 指定的型別。

    • void
      • 使用者角度

      • 呼叫這個方法來執行特定的動作,例如:列印值、改變值、設定值....,但是這個方法不會回饋一個值。

        換個角度,就是這個方法的呼叫敍述不是一個值,所以這個方法的呼叫敍述必須單獨存在,不可以是其他敍述的一部份。

      • 開發者角度

      • 這個方法單純執行指定的動作,例如:列印指定的值、改變指定變數的值、設定指定位置的值....,但是這個方法不必回饋給使用者一個值。
        有可能方法中有運算出一個值,但這個值會做為要列印的值,或是要指派的值,但不必回饋給使用者。

      • return statement

      • 方法中若沒有 return; 敍述,會執行到最後一行後再返回呼叫位置執行。若有 return; 敍述,在執行到 return; 時,便立刻返迴呼叫位置執行。

  3. 參數列
  4. parameter list (argument list)
    • 使用者角度

    • 要指派給方法協助運算的值。

    • 開發者角度

    • 呼叫敍述指派區域變數

  5. 參數傳遞
  6. Java is always pass by value.

    參數的傳遞,是把放在呼叫敍述小括號裏面的字面值區域變數的值複製被呼叫方法

    而被呼叫方法的執行過程中,環境會配置該方法專用的區域變數來儲存複製過來的值。所以運算過程中就算有修改變數值,改變的是被呼叫方法的區域變數,而不是呼叫敍述小括號裏面的區域變數。

    總而言之,放在呼叫敍述小括號的區域變數,不會因為被呼叫方法的執行而改變。

    但是要注意,如果呼叫敍述小括號裏面的區域變數是參考型別變數,那麼從呼叫敍述複製給被呼叫方法的將會是某一個物件的記憶體位址,而被呼叫方法將可以透過該記憶體位址改變物件的內容。除非該物件的內容不可變動。

  7. Method overload
  8. 方法多載

    同一個類別或上、下層類別中,方法名稱相同參數列不同者,為合法的 Method overload。此機制讓功能類似,但執行細節有差異的運算,可以使用相同的方法名稱。
    參數列不同包含:
    • 型別不同
    • 數量不同
    • 順序不同

  9. variable argument
  10. 變動參數 / Var-Args
    • 呼叫敍述的小括號中,可以指派 0 到任意個指定型別的值。
    • 參數列中最多只能有一個變動參數。
    • 參數列中若除了變動參數之外還有其他參數,變動參數必須置於最末端。

  11. 方法呼叫順序

  12. Promotion -> Var-Args

  13. 遞迴方法
  14. recursive method

    一個方法在執行過程中呼叫自己。或多個方法彼此呼叫形成一個循還。
    • void
    • not a void

作者 : 許裕永

許老師的回答: