五、方法
目錄:何謂方法、方法的定義及調(diào)用、方法重載、命令行傳參、可變參數(shù)、遞歸
1.什么是方法?
Java方法是語句的集合,它們在一起執(zhí)行一個功能。
方法是解決一類問題的步驟的有序組合。
方法包含于類或?qū)ο笾小?br>
方法在程序中被創(chuàng)建,在其它方法被引用。
設(shè)計方法的原則:方法的本意是功能塊,就是實現(xiàn)某個功能的語句塊的集合。設(shè)計方法的時候,最好保持方法的原子性,就是一個方法只實現(xiàn)一個功能,這樣有利于后期的擴展。
例:加法
public static int add(int a,int b) {
return a+b;
}
2.方法的定義和調(diào)用
1)方法的定義
Java的方法類似于其它語言的函數(shù),是一段用來完成特定功能的代碼片段。
方法包含一個方法頭和方法體。
修飾符:是可選的,告訴編輯器如何調(diào)用該方法。定義了該方法的訪問類型。
返回值類型:方法可能是返回值。returnValueType是返回值的數(shù)據(jù)類型,有些方法執(zhí)行所需的操作,但沒有返回值,在這種情況下,returnValueType的關(guān)鍵字是void。
方法名:是方法的實際名稱。方法名和參數(shù)表共同構(gòu)成方法簽名。
參數(shù)類型:參數(shù)像是一個占位符。當(dāng)方法被調(diào)用時,傳遞值被稱為實參或變量,參數(shù)列表是指方法的參數(shù)類型、順序和參數(shù)的個數(shù)。參數(shù)是可選的,方法可是不包含任何參數(shù)。
形式參數(shù):在方法被調(diào)用時用于接收外界輸入的數(shù)據(jù)。
實參:調(diào)用方法時實際傳給方法的數(shù)據(jù)。
方法體:方法體包含具體的語句,定義該方法的功能。
修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名) {
······
方法體
······
return 返回值;
}
注意:可以利用return來終止方法。
2)方法的調(diào)用
調(diào)用方法:對象名.方法名(實參列表)
Java支持兩種調(diào)用方法的方式,根據(jù)方法是否返回值來選擇。
Ⅰ當(dāng)方法返回一個值的時候,方法調(diào)用通常被當(dāng)作一個值。
Ⅱ如果方法返回值是void,方法調(diào)用一定是一條語句。
3.方法的重載
重載就是在一個類中,有相同的函數(shù)名稱,但形參不同的函數(shù)。
方法重載的規(guī)則:
Ⅰ方法名稱必須相同。
Ⅱ參數(shù)列表必須不同(個數(shù)不同,或類型不同、參數(shù)排列順序不同)
Ⅲ方法的返回值類型可以相同也可以不同。
Ⅳ僅僅返回值類型不足以成為方法的重載。
現(xiàn)實理論:方法名稱相同時,編譯器會根據(jù)調(diào)用方法的參數(shù)個數(shù)、參數(shù)類型等去匹配,以選擇對應(yīng)的方法,如果匹配失敗,則編譯器報錯。
4.命令行傳遞參數(shù)
有時候希望運行一個程序的時候再傳遞給它消息,這要靠傳遞命令行參數(shù)給main()函數(shù)實現(xiàn)。
通過文件夾打開命令行,在編譯的時候不用,執(zhí)行的時候要添加完整包名,并在執(zhí)行的時候附加參數(shù)。
5.可變參數(shù)
JDK1.5開始,Java支持傳遞同類型的可變參數(shù)給的一個方法。
在方法聲明中,在指定參數(shù)類型后加上一個省略號(···)。
一個方法中只能指定一個可變參數(shù),它必須是方法的最后一個參數(shù)。任何普通的參數(shù)必須在它之前聲明。
其本質(zhì)就是數(shù)組。
例:排序,尋找最大的數(shù)
public static void printMax(double …numbers) {
if(number.length==0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for(int i=1;i<numbers.length;i++) {
if(numbers[i]>result) {
result = numbers[i];
}
}
System.out.println("The max value is"+result);
調(diào)用:
Demo demo = new Demo();
demo.printMax(…numbers:1.0,3.0,4.0,2.0,7.0,5.0);
6.遞歸詳解
遞歸:就是A方法調(diào)用A方法,就是自己調(diào)用自己。
利用遞歸可以用簡單的程序來解決一些復(fù)雜的問題。它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。
遞歸結(jié)構(gòu)包括兩個部分:
遞歸頭:什么時候不調(diào)用自身方法,如果沒有頭,將陷入死循環(huán)。
遞歸體:什么時候需要調(diào)用自身方法。
遞歸三個主要內(nèi)容:邊界、前階段、返回階段
例:階乘
public static int f(int n) {
if(n==1) {
return 1;
}else {
return n*f(n:n-1);
}
}