函數的使用可以使重複的程式碼進行簡化,就類似我們的一個小助理。

# 函式

// 定義一個求和函數
public static void sum(int a, int b) {
    int i;
    int sum=0;
    for ( i=a; i<=b; i++ ) {
        sum += i;
    }
    System.out.println(a+"到"b+"的和是"+sum);
}
public static void main(String[] args) {
    // 調用函數
    sum(1,10);
    sum(20,30);
    sum(35,45);
}

# 定義函式

  • 函式是一塊程式碼,可接收零或多個參數做一件事情,並返回零或一個值。
  • 概念類似於數學的 y=f(x)
  • Java 的函式必須定義在類別的內部,成為類別的成員。
public static <返回值型態> <函式名稱>(<參數表>){
    <函式體>
}
  • 返回值型態:運算結束後所要返回的資料型態,可以返回基本型態、物件或 void
    • void 表示這函示不會回傳任何值。
  • 函式名稱:是一個 Java 名稱必須遵循命名規則
  • 參數表:由 0 個或多個參數定義,需以。分隔
  • static : 表示這個函式屬於這個類,而不屬於這個類的任何對象,因此我們才可以不製造類別的物象,直接使用 函式名稱() 調用它。

# 調用函式

函式名(參數名);
  • () 達到了表示函式調用的重要作用
  • 即使沒有參數也必須要有 ()
  • 可以傳遞的值是表達式的結果,包含:常數、變數、函數返回值,計算結果...

# 函式返回 return

函式知道每一次是從哪裡調用它,函式結束的時候會返回到正確的位置。

# 從函式中返回值

return 表達式;
  • return 停止函式的執行,並回送一個值
  • 一個函式裡可以有多個 return 語句,但最好的作法還是保持單一的出口。
public static int max(int a,int b){
    int ret;
    if(a > b) ret = a;
    else ret = b;
    return ret; // 單一出口
}
  • 可以為變數賦值
  • 可以再傳遞給函式
  • 甚至可以丟棄
int a = 5;
int b = 6;
int c;
c = max(10,12); // c = 12
c = max(a,b);   // c = 6
c = max(c,23);  // c = 23
c = max(max(c,a),5); // c = 23

# 沒有返回值

void <函式名>(<參數表>)
  • 不能用帶值的 return ,甚至可以沒有 return
  • 調用的時候不能做返回值賦值。

# 參數的傳遞

# 型態不匹配

  • 當函式期望的參數型態比調用函式的參數型態還寬時,編譯器能幫忙轉換。

char -> int -> double

  • 當函式期望的參數型態比調用函式的參數型態還窄時,必須自己強制型態轉換。
(int)5.0 // 5

若無法轉換則報錯~~~

# 區域變數

  • 概念
    • 函式每次運行時,都會產生一個獨立的變數空間,稱作區域變數。
    • 區域變數會定義在函式體內。
    • 參數也是一種區域變數
  • 變數的生存期與作用域
    • 生存期:開始到結束的時候
    • 作用域: 哪些區域可以訪問到這個變數
    • 對於區域變數而言,都是在大括號所圍成的區塊內
  • 規則
    • 程式運行離開這個區塊後,區域變數就會消失
    • 區塊外部變異的變數在內部仍有效
    • 不能在一個區塊中定義同名的變數,也不能定義區塊外部以定義過的變數
int main()
{
    int scp1;//scp1 出現了
    { //scp1 還是存在
        int scp2; //scp2 出現了
        {//scp1 與 scp2 都還是存在的
            int scp3;//scp1、scp2、scp3 都存在
        }
        //scp3 不存在了
        //scp1 與 scp2 還存在
    }
    //scp2 不存在了
    //scp1 還存在
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay