## Java編程那些事兒52—方法聲明
鄭州游戲學院 陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
### 第七章 方法
方法(method),在面向過程的語言中稱作函數(function),在匯編語言中稱作子程序,是一個代碼功能塊,實現某個特定的功能。在實際的程序開發中,方法是一種基礎的組織代碼的方式。本部分就介紹方法相關的概念、相關語法以及實際使用時需要注意的問題。
**7.1 方法概述**
方法的概念來源于數學上的函數,在數學中,當數據具有一定的規律時,就是用一個函數來代碼該數字的規律,例如f(n)=n則代表1、2、3、……這樣的一個數列。在數學上n是參數,對于確定的n值只有一個f(n)的值和它對應。
方法是一組為了實現特定功能的代碼塊的集合。方法在語法上的功能主要有以下兩個:
1.?結構化代碼
將代碼按照功能進行組織,使代碼的結構比較清晰,容易閱讀和修改,也就是程序的可維護性強。
2.?減少代碼重復
一個固定的功能,可能會在程序中多次使用,在使用時只需要調用寫好的方法,而不用重復書寫對應的功能代碼。
方法在書寫時需要注意以下兩點:
3.?邏輯嚴謹
方法實現的一個完整的功能,所以在書寫時要考慮到各種可能的情況,并對每種情況做出恰當的處理。
4.?通用性強
方法實現的是一種功能,在實際實現時,可以根據需要,使方法具備一定的通用性,除非必要,否則不要寫專用的方法。
在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、?修飾符
修飾符是可選的,也就是在方法聲明時可以不書寫。
修飾符是為方法增加特定的語法功能,對于方法實現的邏輯功能無影響。方法的訪問控制符有五個,依次是:
u?static——靜態的
u?final——最終的
u?abstract——抽象的
u?synchronized——同步的
u?native——本地的
具體修飾符的作用在后續內容中將詳細介紹。
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語句時需要特別注意的問題。
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結