第七章 方法
方法(method),在面向過程的語言中稱作函數(function),在匯編語言中稱作子程序,是一個代碼功能塊,實現某個特定的功能。在實際的程序開發中,方法是一種基礎的組織代碼的方式。本部分就介紹方法相關的概念、相關語法以及實際使用時需要注意的問題。
7.1 方法概述
方法的概念來源於數學上的函數,在數學中,當數據具有一定的規律時,就是用一個函數來代碼該數字的規律,例如f(n)=n則代表1、2、3、……這樣的一個數列。在數學上n是參數,對於確定的n值只有一個f(n)的值和它對應。
方法是一組為了實現特定功能的代碼塊的集合。方法在語法上的功能主要有以下兩個:
l結構化代碼
將代碼按照功能進行組織,使代碼的結構比較清晰,容易閱讀和修改,也就是程序的可維護性強。
l減少代碼重復
一個固定的功能,可能會在程序中多次使用,在使用時只需要調用寫好的方法,而不用重復書寫對應的功能代碼。
方法在書寫時需要注意以下兩點:
l邏輯嚴謹
方法實現的一個完整的功能,所以在書寫時要考慮到各種可能的情況,並對每種情況做出恰當的處理。
l通用性強
方法實現的是一種功能,在實際實現時,可以根據需要,使方法具備一定的通用性,除非必要,否則不要寫專用的方法。
在Java語言中,恰當的使用方法,將使程序更加優雅,便於閱讀和使用。下面就來介紹方法聲明的語法格式。
7.2 方法聲明
方法聲明寫在代碼中類聲明的內部,方法聲明的外部,偽代碼如下:
public class Hello{
方法聲明1
方法聲明2
……
}
在Java語言中,方法聲明之間沒有順序。
方法聲明,就是聲明一種新的功能,或者說創造一種新的功能。例如以下是一個求int數據絕對值的方法聲明代碼:
public int abs(int n){
if(n > 0){
return n;
}else{
return –n;
}
}
這裡就實現了求int值絕對值的功能,為了使該功能通用,使用一個參數n代表需要求絕對值的數值,在方法內部使用求絕對值的邏輯:正數的絕對值是自身,負數的絕對值是相反數,使用return語句將方法運算的結果返回。
具體方法聲明的語法格式如下:
訪問控制符[修飾符]返回值類型方法名稱(參數列表){
方法體
}
在實際聲明一個方法時,需要依次確定以上內容。下面是具體的說明:
1、訪問控制符
訪問控制符限定方法的可見范圍,或者說是方法被調用的范圍。方法的訪問控制符有四種,按可見范圍從大到小依次是:public、protected,無訪問控制符,private。其中無訪問控制符不書寫關鍵字即可。具體的范圍在後續有詳細介紹。
2、修飾符
修飾符是可選的,也就是在方法聲明時可以不書寫。
修飾符是為方法增加特定的語法功能,對於方法實現的邏輯功能無影響。方法的訪問控制符有五個,依次是:
ustatic——靜態的
ufinal——最終的
uabstract——抽象的
usynchronized——同步的
unative——本地的
具體修飾符的作用在後續內容中將詳細介紹。
3、返回值類型
返回值類型是指方法功能實現以後需要得到的結果類型,該類型可以是Java語言中的任意數據類型,包括基本數據類型和復合數據類型。如果方法功能實現以後不需要反饋結果,則返回值類型書寫為void。
在實際書寫方法時,需要首先考慮一下方法是否需要反饋結果,如果反饋結果,則結果的類型是什麼?這個根據方法的需要進行確定,例如上面求絕對值的方法,int類型的絕對值還是int類型,所以把返回值類型做成int型。
在方法聲明裡聲明返回值類型,便於方法調用時獲得返回值,並對返回值進行賦值以及運算等操作。
4、方法名稱
方法名稱是一個標識符,用來代表該功能塊,在方法調用時,需要方法名稱來確定調用的內容。
為了增強代碼的可讀性,一般方法名稱標識符和該方法的功能一直,例如實現數組排序的方法,可以將方法名稱設定為sort。
在Java編碼規范中,要求方法的首字母小寫,而方法名稱中單詞和單詞間隔的第一個字母大寫,例如bubbleSort。
5、參數列表
參數列表是聲明方法需要從外部傳入的數據類型以及個數,例如上面求int類型絕對值的方法,每次需要從外部傳入一個int類型的值,這就需要在參數列表部分進行聲明,語法格式為:
數據類型參數名稱
多個參數時的格式為:
數據類型參數名稱1,數據類型參數名稱2,……
聲明參數時,類型在前,名稱在後,如果有多個參數時,參數和參數之間使用逗號進行分割。
參數的值在方法調用時進行指定,而在方法內部,可以把參數看作是已經初始化完成的變量,直接進行使用。
參數列表部分是方法通用性的最主要實現部分,理論上來說,參數越多,方法的通用性越強,在聲明方法時,可以根據需要確定參數的個數,以及參數的類型。參數在參數列表中的排列順序只和方法調用時有關。
6、方法體
方法體是方法的功能實現代碼。方法體部分在邏輯上實現了方法的功能,該部分都是具體的實現代碼,不同的邏輯實現代碼區別會比較大。
在方法體部分,如果需要返回結果的值,則可以使用return語句,其語法格式為:
return 結果的值;
或無結果返回時:
return;
如果方法的返回值類型不是void,則可以使用return返回結果的值,要求結果值的類型和方法聲明時返回值類型必須一致。如果返回值類型是void時,可以使用return語句實現方法返回,而不需要返回值。當代碼執行到return語句時,方法結束,所以return語句的後續書寫順序的代碼,例如:
return 0;
int n = 0;//語法錯誤,永遠無法執行到該語句
另外,如果返回值類型不是void時,需要保證有值返回,例如下面的方法就有語法錯誤:
public int test(int a){
if(a < 0){
return 0;
}
}
則該方法的聲明代碼中,當a的值大於等於零時,則沒有返回值,這語法上稱作返回值丟失,這個也是在書寫return語句時需要特別注意的問題。