成員方法描述對象所具有的功能或操作,反映對象的行為,是具有某種相對獨立功能的程序模塊。
它與過去所說的子程序、函數(shù)等概念相當。
一個類或?qū)ο罂梢杂卸鄠€成員方法,對象通過執(zhí)行它的成員方法對傳來的消息作出響應(yīng),完成特定的功能。
成員方法一旦定義,便可在不同的程序段中多次調(diào)用,故可增強程序結(jié)構(gòu)的清晰度,提高編程效率。
1 成員方法的分類
從成員方法的來源看,可將成員方法分為:
類庫成員方法。這是由 Java 類庫提供的,用戶只要按照 Java 提供的調(diào)用格式去使用這些成員方法即可。
用戶自定義的成員方法。這是為了解決用戶的特定問題,由用戶自己編寫的成員方法。程序設(shè)計的主要工作就是編寫用戶自定義類、自定義成員方法。
從成員方法的形式看,可將成員方法分為:
無參數(shù)成員方法。
帶參數(shù)成員方法。
2 聲明成員方法的格式
在 Java 程序中,成員方法的聲明只能在類中進行,格式如下:
[修飾符] 返回值的類型 成員方法名(形式參數(shù)表) throw [異常表]
{
// 說明部分
// 執(zhí)行語句部分
}
成員方法的聲明包括成員方法頭和成員方法體兩部分。
成員方法頭確定成員方法的名字、形式參數(shù)的名字和類型、返回值的類型、訪問限制和異常處理等;
成員方法體由包括在花括號內(nèi)的說明部分和執(zhí)行語句部分組成,它描述該方法功能的實現(xiàn)。
在成員方法頭中:
修飾符??梢允枪苍L問控制符 public、私有訪問控制符 private、保護訪問控制符 protected 等訪問權(quán)限修飾符,也可以是靜態(tài)成員方法修飾符 static、最終成員方法修飾符 final、本地成員方法修飾符 native、抽象成員方法修飾符 abstract等非訪問權(quán)限修飾符。訪問權(quán)限修飾符指出滿足什么條件時該成員方法可以被訪問。非訪問權(quán)限修飾符指明數(shù)據(jù)成員的使用方式。
返回值的類型。返回值的類型用 Java 允許的的各種數(shù)據(jù)類型關(guān)鍵字(int、float 等)指明成員方法完成其所定義的功能后,運算結(jié)果值的數(shù)據(jù)類型。若成員方法沒有返回值,則在返回值的類型處應(yīng)寫上 void 關(guān)鍵字,以表明該方法無返回值。
成員方法名。是用戶遵循標識符定義規(guī)則命名的標識符。
形式參數(shù)表。成員方法可分為帶參成員方法和無參成員方法兩種。對于無參成員方法來說則無形式參數(shù)表這一項,但成員方法名后的一對圓括號不可省略;對于帶參成員方法來說,形式參數(shù)表指明調(diào)用該方法所需要的參數(shù)個數(shù)、參數(shù)的名字及其參數(shù)的數(shù)據(jù)類型,其格式為:
(形式參數(shù)類型1 形式參數(shù)名1,形式參數(shù)類型2 形式參數(shù)名2,
)
throw [異常表]。它指出當該方法遇到一些方法設(shè)計者未曾想到的問題時如何處理。
3 方法體中的局部變量
在方法體內(nèi)可以定義本方法所使用的變量,這種變量是局部變量,它的生存期與作用域是在本方法內(nèi)。也就是說,局部變量只能在本方法內(nèi)有效或可見,離開本方法則這些變量被自動釋放。
方法體內(nèi)定義變量時,變量前不能加修飾符。
局部變量在使用前必須明確賦值,否則編譯時會出錯。
在一個方法內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在復(fù)合語句中有效,這種復(fù)合語句也被稱為程序塊。
4 成員方法的返回值
若方法有返回值,則在方法體中用 return 語句指明要返回的值。
其格式為:
return 表達式;
或
return(表達式);
表達式可以是常量、變量、對象等。
return 語句后面表達式的數(shù)據(jù)類型必須與成員方法頭中給出的“返回值的類型”一致。
5 形式參數(shù)與實際參數(shù)
一般來說,可以通過以下方式來引用成員方法:
成員方法名(實參列表)
在引用成員方法時應(yīng)注意:
對于無參成員方法來說,是沒有實際參數(shù)列表的,但方法名后的括弧不能省略。
對于帶參數(shù)的成員方法來說,實參的個數(shù)、順序以及它們的數(shù)據(jù)類型必須與形式參數(shù)的個數(shù)、順序以及它們的數(shù)據(jù)類型保持一致,各個實參間用逗號分隔。實參名與形參名可以相同也可以不同。
實參也可以是表達式,此時一定要注意使表達式的數(shù)據(jù)類型與形參的數(shù)據(jù)類型相同,或者使表達式的類型按 Java 類型轉(zhuǎn)換規(guī)則達到形參指明的數(shù)據(jù)類型。
實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即只能由實參傳遞給形參,而不能由形參傳遞給實參。程序中執(zhí)行到引用成員方法時,Java 把實參值拷貝到一個臨時的存儲區(qū)(棧)中,形參的任何修改都在棧中進行,當退出該成員方法時,Java 自動清除棧中的內(nèi)容。
6 成員方法的引用方式
6.1 方法語句
成員方法作為一個獨立的語句被引用。
6.2 方法表達式
成員方法作為表達式中的一部分,通過表達式被引用。
6.3 方法作為參數(shù)
一個成員方法作為另一個成員方法的參數(shù)被引用。更為典型的是,在遞歸的成員方法中,一個成員方法作為它自身的參數(shù)被引用。
6.4 通過對象來引用
這里有兩重含義,一是通過形如“對象名.方法名”的形式來引用對象,二是當一個對象作為成員方法的參數(shù)時,通過這個對象參數(shù)來引用對象的成員方法。
7 引用成員方法時應(yīng)注意的事項
當一個方法引用另一個方法時,這個被引用的方法必須是已經(jīng)存在的方法。
另外,還要視被引用的成員方法存在于何處而做不同的處理。
如果被引用的方法存在于本文件中,而且是本類的方法,則可直接引用。
如果被引用的方法存在于本文件中,但不是本類的方法,則要考慮類的修飾符與方法的修飾符來決定是否能引用。
如果被引用的方法不是本文件的方法而是 Java 類庫的方法,則必須在文件的開頭處用 import 命令將引用有關(guān)庫方法所需要的信息寫入本文件中。
如果被引用的方法是用戶在其他的文件中自己定義的方法,則必須通過加載用戶包的方式來引用。
8 成員方法的遞歸引用
成員方法的遞歸引用就是指在一個方法中直接或間接引用自身的情況。
9 static 修飾的靜態(tài)方法
用 static 修飾符修飾的方法被稱為靜態(tài)方法,它是屬于整個類的類方法。
不用 static 修飾符限定的方法,是屬于某個具體類對象的方法。
static 方法使用特點如下:
static 方法是屬于整個類的,它在內(nèi)存中的代碼段將隨著類的定義而分配和裝載。而非 static 的方法是屬于某個對象的方法,當這個對象被創(chuàng)建時,在對象內(nèi)存中擁有這個方法的專用代碼段。
引用靜態(tài)方法時,可以使用對象名做前綴,也可以使用類名做前綴。
static 方法只能訪問 static 數(shù)據(jù)成員,不能訪問非 static 數(shù)據(jù)成員,但非 static 方法可以訪問 static 數(shù)據(jù)成員。
static 方法只能訪問 static 方法,不能訪問非 static 方法,但非 static 方法可以訪問 static 方法。
main 方法是靜態(tài)方法。在 Java 的每個 Application 程序中,都必須有且只有一個 main 方法,它是 Application 程序運行的入口點。
10 數(shù)學(xué)函數(shù)類方法
Java 類庫提供的實現(xiàn)常用數(shù)學(xué)函數(shù)運算的標準數(shù)學(xué)函數(shù)方法,這些方法都是 static 方法。
標準數(shù)學(xué)函數(shù)方法在 Java.lang.Math 類中,使用方法比較簡單,格式如下:
類名.數(shù)學(xué)函數(shù)方法名(實參列表)
11 final 修飾的最終方法
用 final 修飾符修飾的方法稱為最終方法,如果某個方法被 final 修飾符所限定,則該類的子類就不能覆蓋父類的方法,即不能再重新定義與此方法同名的自己的方法,而僅能使用從父類繼承來的方法。
使用 final 修飾方法,就是為了給方法“上鎖”,防止任何繼承類修改此方法,保證了程序的安全性和正確性。
注意:final 修飾符也可用于修飾類,而當用 final 修飾符修飾類時,所有包含在 final 類中的方法,都自動成為 final 方法。
12 native 修飾的本地方法
修飾符 native 修飾的方法稱為本地方法,此方法使用的目的是為了將其他語言(如 C、C++、Fortran、匯編等)嵌入到 Java 語言中。
這樣,Java 可以充分利用已經(jīng)存在的其他語言的程序功能模塊,避免重復(fù)編程。
在 Java 程序中使用 native 方法時應(yīng)該特別注意平臺問題。
由于 native 方法嵌入其他語言書寫的模塊是以非 Java 字節(jié)碼的二進制代碼形式嵌入 Java 程序的,而這種二進制代碼通常只能運行在編譯生成它的平臺上,所以整個 Java 程序的跨平臺性能將受到限制或破壞,除非 native 方法引入的代碼也是跨平臺的。