Java基礎——函數
一、函數的基本使用
函數的定義
函數是電腦編程中非常重要的部分,是編程中最基本的元素之一。函數表示的是一 種通用的過程,這種過程能夠對外界提供服務。例如,現實生活中,ATM 取款機上有不同 的功能,我們可以理解為 ATM 機上具有不同的函數可以調用;我們在 ATM 機上取錢,就 可以理解為我們在 ATM 機上調用了“取錢”函數。在這種關係中,我們是“取錢”函數 的調用者,“取錢”函數為我們提供服務。
代碼展示如下:
package p4;public class hanshu{public static void main(String [] args){int d=add(3,2);//調用函數System.out.println(d);}public static int add(int a,int b){//聲明public static 傳回值類型 函數名(形參)int c=a+b;//實現return c;//傳回值}}
Ⅰ,定義位置
在類中,任何函數的外部;一個類中可以有多個函數,函數的順序是無關緊要的。
Ⅱ,聲明
public static 傳回值類型 函數名(參數表)
形式參數(形參):相當於函數內部有效局部變數
最重要的部分就是函數的三要素:傳回值、函數名、參數表。 傳回值
函數名:表示函數的名字;
參數表:表示調用函數時所給的參數是什麼,即調用函數時需要給函數哪些 “輸入”。
傳回值: 以“取錢”函數為例,函數的傳回值為“錢”,我們作為調用者調用“取錢”函數,目 的就是獲得這個函數的傳回值“錢”;這個函數的參數表表示我們對調用“取錢”時應該給 這個函數傳遞的參數,取錢時需要“銀行卡、密碼、取款金額”等一系列參數。 在 Java 中,函數(Function)也被稱之為方法(Method)。Java 中並不區分這兩個概 念,因此,本書中“函數”和“方法”指的是同一個意思。
return 語句除了能夠傳回值之外,還能夠控制 流程的跳轉。具體的說,在執行 return 語句的時候,被調用的函數會終止執行,並返回到 函數的調用點上
傳回值為void類型,不需要傳回值,將代碼塊中代碼執行完再結束。
Ⅲ,實現
{ }
必須和聲明一致(主要指傳回值類型)
Ⅳ,調用函數
函數名(實際參數(實參));
實參會依次給形參賦值
調用函數,程式流程會進入函數,函數返回,程式流程會返回到函數調用點
①函數的嵌套調用
前面的內容,我們為大家介紹了函數的一些基本使用。接下來,要介紹的是函數中一 些更加靈活的應用。看下面這個代碼的例子:
package p4;public class TestNestedCall{/*首先,是在main函數中輸出“main1”,然後,在main函數中調用了ma方法,於是,流程從 main 中跳轉到了ma函數中。在ma函數的第一個語句中,輸出“ma1”。*/public static void main(String args[]){System.out.println("main1");ma();System.out.println("main2");}/*然後,在ma方法中,又調用了mb方法。*/public static void ma(){System.out.println("ma1");mb();System.out.println("ma2");}public static void mb(){System.out.println("mb1");System.out.println("mb2");}/*在ma調用mb函數之後,mb函數輸出“mb1”和“mb2”。然後,mb 函數中所有的代碼都執行完了,mb函數返回其調用點,也就是返回到ma方法中。然後,ma方法繼續執行,輸出“ma2”。然後,ma方法的代碼也都全部完成,於是 ma 方法也返回調用點,也就是返回到主函數中。最後,主函數輸出“main2”,主函數中所有代碼都執行完畢,程式終止。*/}
②函數的遞迴調用
函數除了能夠調用其他函數之外,還可以調用函數本身。這就是函數的遞迴調用。
如果需要寫遞迴的話,需要注意一下幾個問題:
1、要首先研究出一個推導公式,這個公式要與參數有關,最好這個公式能夠用(n-1)調 用的結果,來計算調用 n 的結果。例如,上面的 n! = (n-1)! * n 就是一個很好的例子。
2、 要寫出遞迴的收斂條件。例如,上面對 n 是否為 1 的判斷,這部分就是在說明遞迴 什麼時候終止。
二、函數的作用
package p4;public class TestSeperator{public static void main(String args[]){System.out.println("Hello World");//列印分隔字元 --------------------for(int i = 0 ; i < 20 ; i++){System.out.print(“-“);}System.out.println();System.out.println("你好,世界");//列印分隔字元 --------------------for(int i = 0 ; i < 20 ; i++){System.out.print(“-“);}System.out.println();System.out.println("Bonjour tout le monde");//列印分隔字元 --------------------for(int i = 0 ; i < 20 ; i++){System.out.print(“-“);}System.out.println();System.out.println("Hallo Welt");}}
1,避免冗餘代碼
我們來分析一下上面的代碼。由於要輸出三個分隔字元,因此,需要有三個一模一樣的 列印語句。因此,我們可以寫一個函數:printSeperator(),這個函數專門用來列印分隔字元。 修改後的代碼如下:
package p4;public class TestSeperator{public static void main(String args[]){System.out.println("Hello World");printSeperator();System.out.println("你好,世界");printSeperator();System.out.println("Bonjour tout le monde");printSeperator();System.out.println("Hallo Welt");}public static void printSeperator(){for(int i = 0 ; i < 20 ; i++){System.out.print(“-“);}System.out.println();}}
2,提高程式的可維護性
如果現在需求產生了變化, 在輸出分隔字元時,希望能夠輸出一行“+”而不是一行“-”,此時,就必須要修改代碼。 如果不使用函數的話,則必須要改動主函數中所有的輸出分隔字元的語句。在這個具體 的例子中,在主函數中的代碼要修改三處。修改後的程式碼片段如下:
System.out.println("Hello World");//列印分隔字元 +++++++++++++++++++for(int i = 0 ; i < 20 ; i++){System.out.print(“+“);}System.out.println();System.out.println("你好,世界");//列印分隔字元 +++++++++++++++++++for(int i = 0 ; i < 20 ; i++){System.out.print(“+“);}System.out.println();System.out.println("Bonjour tout le monde");//列印分隔字元 +++++++++++++++++++for(int i = 0 ; i < 20 ; i++){System.out.print(“+“);}System.out.println();System.out.println("Hallo Welt");
3,提高程式的重用性
如果使用函數的話,由於在主函數中僅僅是對同一個函數的多次調用, 因此,讓函數實現發生改變的時候,函數的調用不需要改變。我們只需要對函數的實現修 改一次,就完成了我們的工作。修改後的代碼如下:
public static void main(String args[]){System.out.println("Hello World");printSeperator();System.out.println("你好,世界");printSeperator();System.out.println("Bonjour tout le monde");printSeperator();System.out.println("Hallo Welt");}public static void printSeperator(){for(int i = 0 ; i < 20 ; i++){System.out.print(“+“);}System.out.println();}
4,提高程式的靈活性
使用函數,利用函數參數的變化,能夠讓代碼更加靈活。例如,假設現在對分 隔符的長度有不同的要求,要求第一個分隔字元長度為 20,第二個分隔字元長度為 25,第三個 分割符長度為 30。 這樣的需求,如果不適用函數的話,則必須要修改這三個輸出的地方,並且每個地方 的輸出語句都比較複雜。而如果使用函數的話,則可以讓函數增加一個參數,這個參數表 示分隔字元的長度。修改後的 printSeperator 函數如下:
public static void printSeperator(int n){for (int i = 0; i < n; i++){System.out.print(“+”);}System.out.println();}
這樣,在主函數中,只要對這個函數傳入不同的參數進行三次調用即可。修改後完整 的主函數如下
public static void main(String args[]){System.out.println("Hello World");printSeperator(20);System.out.println("你好,世界");printSeperator(25);System.out.println("Bonjour tout le monde");printSeperator(30);System.out.println("Hallo Welt");}