C語言中文網 目錄
首頁 > Java教程 > Java類和對象 閱讀:2,932

Java成員方法:Java成員方法的聲明和調用、形參和實參及局部變量

聲明成員方法可以定義類的行為,行為表示一個對象能夠做的事情或者能夠從一個對象取得的信息。類的各種功能操作都是用方法來實現的,屬性只不過提供了相應的數據。一個完整的方法通常包括方法名稱、方法主體、方法參數和方法返回值類型,其結構如圖 1 所示。


圖1 方法組成元素

成員方法一旦被定義,便可以在程序中多次調用,提高了編程效率。聲明成員方法的語法格式如下:
public class Test
{
    [public|private|protected][static]<void|return_typexmethod_name>([paramList])
    {
        //方法體
    }
}

上述代碼中一個方法包含 4 部分:方法的返回值、方法名稱、方法的參數和方法體。其中 retum_type 是方法返回值的數據類型,數據類型可以是原始的數據類型,即常用的 8 種數據類型,也可以是一個引用數據類型,如一個類、接口和數組等。

除了這些,一個方法還可以沒有返回值,即返回類型為 void,像 main() 方法。method_name 表示自定義的方法名稱,方法的名稱首先要遵循標識符的命名約定,除此之外,方法的名稱第一個單詞的第一個字母是小寫,第二單詞的第一個字母是大寫,依此類推。

paramList 表示參數列表,這些變量都要有自己的數據類型,可以是原始數據類型,也可以是復雜數據類型,一個方法主要依靠參數來傳遞消息。方法主體是方法中執行功能操作的語句。其他各修飾符的含義如下。
  • public、private、protected:表示成員方法的訪問權限。
  • static:表示限定該成員方法為靜態 方法。
  • final:表示限定該成員方法不能被重寫或重載。
  • abstract:表示限定該成員方法為抽象方法。抽象方法不提供具體的實現,并且所屬類型必須為抽象類。

例 1

為上一節創建的學生類 Student 添加一個可以返回學生信息字符串的方法。代碼如下:
public class Student
{
    public StringBuffer printInfo(Student st)
    {
        StringBuffer sb=new StringBuffer();
        sb.append("學生姓名:"+st.Name+"\n 學生年齡:"+st.Age+"\n 學生性別:"+st.isSex());
        return sb;
    }
}

上述代碼創建了一個名稱為 printInfo 的方法,其返回值類型為 StringBuffer(引用數據類型)。該方法需要傳遞一個 Student 類型的參數,最后需要將一個 StringBuffer 類型的數據返回。

1. 成員方法的返回值

若方法有返回值,則在方法體中用 return 語句指明要返回的值,其格式如下所示。
return表達式
或者
return(表達式)

其中,表達式可以是常量、變量、對象等。表達式的數據類型必須與聲明成員方法時給出的返回值類型一致。

2. 形參、實參及成員方法的調用

一般來說,可以通過以下方式來調用成員方法:
methodName({paramList})
關于方法的參數,經常會提到形參與實參,形參是定義方法時參數列表中出現的參數,實參是調用方法時為方法傳遞的參數

例 2

下面 retumMin() 方法中的 m 和 n 是形參,調用 retumMin() 方法時的 x 和 y 是實參。
public int returnMin(int m,int n)
{
    return Math.min(m,n);    //m和n是形參
}
public static void main(String[] args)
{
    int x=50;
    int y=100;
    Test t=new Test();
    int i=t.returnMin(x,y);    //x和y是實參
    System.out.println(i);
}

方法的形參和實參具有以下特點:
  • 形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在方法內部有效,方法調用結束返回主調 方法后則不能再使用該形參變量。
  • 實參可以是常量、變量、表達式、方法等,無論實參是何種類型的量,在進行方法調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值、輸入等辦法使實參獲得確定值。
  • 實參和形參在數量、類型和順序上應嚴格一致,否則會發生“類型不匹配” 的錯誤。
  • 方法調用中發生的數據傳送是單向的,即只能把實參的值傳送紿形參,而不能把形參的值反向地傳送給實參。因此在方法調用過程中,形參的值發生改變,而實參中的值不會變化。

例 3

下面的示例演示了調用 add() 方法前后形參 x 的變化。
public int add(int x)
{
    x+=30;
    System.out.println("形參 x 的值:"+x);
    return x;
}
public static void main(String[] args)
{
    int x=150;
    System.out.println("調用 add() 方法之前 x 的值:"+x);
    Test t=new Test();
    int i=t.add(x);
    System.out.println("實參 x 的值:"+x);
    System.out.println("調用 add() 方法的返回值:"+i);
}

運行上述程序,輸出結果如下:
調用 add() 方法之前 x 的值:150
形參 x 的值:180
實參 x 的值:150
調用 add() 方法的返回值:180
從輸出結果可以看出,形參 x 值的改變,并沒有影響實參 x。

在調用成員方法時應注意以下 4 點:
  1. 對無參成員方法來說,是沒有實際參數列表的(即沒有 paramList),但方法名后的括號不能省略。
  2. 對帶參數的成員方法來說,實參的個數、順序以及它們的數據類型必須與形式參數的個數、順序以及它們的數據類型保持一致,各個實參間用逗號分隔。實參名與形參名可以相同,也可以不同。
  3. 實參也可以是表達式,此時一定要注意使表達式的數據類型與形參的數據類型相同,或者使表達式的類型按 Java 類型轉換規則達到形參指明的數據類型。
  4. 實參變量對形參變量的數據傳遞是“值傳遞”,即只能由實參傳遞給形參,而不能由形參傳遞給實參。程序中執行到調用成員方法時,Java 把實參值復制到一個臨時的存儲區(棧)中,形參的任何修改都在棧中進行,當退出該成員方法時,Java 自動清除棧中的內容。

3. 方法體中的局部變量

在方法體內可以定義本方法所使用的變量,這種變量是局部變量。它的生存期與作用域是在本方法內,也就是說,局部變量只能在本方法內有效或可見,離開本方法則這些變量將被自動釋放。

在方法體內定義變量時,變量前不能加修飾符。局部變量在使用前必須明確賦值,否則編譯時會出錯。另外,在一個方法內部,可以在復合語句中定義變量,這些變量只在復合語句中有效。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo