函數的使用可以使重複的程式碼進行簡化,就類似我們的一個小助理。
# 函式
| |
| 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
。 - 函式名稱:是一個 Java 名稱必須遵循命名規則
- 參數表:由 0 個或多個參數定義,需以。分隔
static
: 表示這個函式屬於這個類,而不屬於這個類的任何對象,因此我們才可以不製造類別的物象,直接使用 函式名稱()
調用它。
# 調用函式
()
達到了表示函式調用的重要作用- 即使沒有參數也必須要有
()
- 可以傳遞的值是表達式的結果,包含:常數、變數、函數返回值,計算結果...
# 函式返回 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 = max(a,b); |
| c = max(c,23); |
| c = max(max(c,a),5); |
# 沒有返回值
- 不能用帶值的
return
,甚至可以沒有 return
。 - 調用的時候不能做返回值賦值。
# 參數的傳遞
# 型態不匹配
- 當函式期望的參數型態比調用函式的參數型態還寬時,編譯器能幫忙轉換。
- 當函式期望的參數型態比調用函式的參數型態還窄時,必須自己強制型態轉換。
若無法轉換則報錯~~~
# 區域變數
- 概念
- 函式每次運行時,都會產生一個獨立的變數空間,稱作區域變數。
- 區域變數會定義在函式體內。
- 參數也是一種區域變數
- 變數的生存期與作用域
- 生存期:開始到結束的時候
- 作用域: 哪些區域可以訪問到這個變數
- 對於區域變數而言,都是在大括號所圍成的區塊內
- 規則
- 程式運行離開這個區塊後,區域變數就會消失
- 區塊外部變異的變數在內部仍有效
- 不能在一個區塊中定義同名的變數,也不能定義區塊外部以定義過的變數
| int main() |
| { |
| int scp1; |
| { |
| int scp2; |
| { |
| int scp3; |
| } |
| |
| |
| } |
| |
| |
| } |