成員函式的說明和使用(轉)

BSDLite發表於2007-08-15
成員函式的說明和使用(轉)[@more@]1:類的成員函式的說明

  成員函式相當於C或C++中的函式。你應該用如下的方式說明一個成員函式:
Type name (Parameter)
//function body
注意:每一個成員函式必須返回一個值或宣告返回為空(void)。它返回型別的說明告訴編譯器它將返回什麼型別的值。在某些情況下,成員函式需要表示它是否成功的完成了它的工作,此時返回型別通常為布林型的。參數列是用逗號分開的一組變數,它將為成員函式提供所需資訊。
  下面例子中定義了一個成員函式。透過它,你的矩形類可以計算自己的面積了:

int getArea(int w,int h)
{
int a;
a=w*h;
return a;
}
  
  另外,矩形還需要對自己進行描繪,因此它需要成員函式drawRect(),此時,你的矩形類的定義將如下所示:

public class DrwRect
{
public static void main(String args[])
{
class Rectangle
{
int width,height,area;
public Rectangle(int w,int h)
{
width=w;
height=h;
area=getArea(w,h);
}

protected int getArea(int w,int h)
{
int a;
a=w*h;
return a;
}

public void drawRect()
{
int i,j;
for(i=width;i>0;i--)
System.out.print("#");
System.out.print("") ;

for(i=height-2;i>0;i--)
System.out.print("#");

for(j=width-2;i>0;j--)
System.out.print("");

System.out.print("#");

for(i=width;i>0;i--)
System.out.print("#");

System.out.print("");
}
} //Rectangle

int w=Integer.valueOf(args[0]).intValue();
int h=Integer.valueOf(args[1]).intValue();
Rectangle myrect=new Rectangle(w,h);
myrect.drawRect();
}
}


  上例中最後一個“#”號後面還有一個System.out.print("")這是由於這個成員函式在上一行沒有結束而且緩衝區沒有溢位時將不把輸出結果寫屏。若你使用print成員函式,卻沒有得到輸出,這時仔細確認一下你是否以""來結束你的輸出流。

2:不同型別的成員函式
  在上例的成員函式宣告中你需要注意兩點:getArea()定義為private型,drawRect()定義為public型。public型意味著任何類都可以呼叫它。private型,它只能被所宣告的類內部呼叫。這些說明型別同樣適用於資料變數。
  若有人想改變一個私有變數,通常要引用下面的成員函式:

public void setWidth(int w)
{
width=w;
}

  注意:在Java中,protected只是作為關鍵字出現,而沒有相應的功能。


3:成員函式的過載
  假如你必須在不同情況下傳送不同的資訊給同一個成員函式的話,該怎麼辦呢?你可以透過對此成員函式說明多個版本(version)的方法來實現過載。過載的本質是建立了一個新的成員函式:你只需給它一個不同的引數列表(parameterlist),如下例所示:

void get Area(int w,int h);
void get Area(float w,float h);

  在第二種情況下,成員函式get Area()接受兩個浮點變數作為它的引數,編譯器根據呼叫時的不同引數來決定該呼叫哪一種成員函式,假如你把兩個整數提供給成員函式,你就呼叫第一個成員函式;假如你把兩個浮點數提供給成員函式,第二個成員函式就被呼叫。

4:靜態成員
  除了public、private和protected以外,你還可以把成員說明為static(靜態)。static修飾符表明一個變數或成員函式對所有類的例項都是相同的,你也許想使用一個所有Rectangle類都可以使用的變數,來說明該類的版本(version),假如你把它說明成一個static,那麼該變數將對該類的所有例項都是一樣的,如:

static int version=1;

  靜態成員函式和靜態變數的優點就在於他們能在沒有建立類的任何一個例項的情況下被引用,引用時在“.”域前,可直接使用類名而無須使用物件名。例如,drawRect成員函式使用了System.out.println成員函式,但實際上你卻未曾建立一個某個System類的物件,這正是因為out是System類的一個靜態變數,所以你可以直接使用這個成員函式而無須定義一個System物件。

5:構造和析構成員函式
  類有一個特殊的成員函式叫做構造成員函式,它通常用於初始化類的資料成員。在建立物件時,會自動呼叫類的構造成員函式。Java中的構造成員函式必須與該類具有相同的名字,另外,構造成員函式一般都應用public型別來說明,這樣才能在程式任意的位置建立類的例項--物件。
  下面是一個Rectangle類的構造成員函式,它帶有兩個引數,分別表示矩形的長和寬:
public Rectangle(int w,int h)
{
width=w;
height=h;
area=getArea(w,h);
}

  除了構造成員函式以外,類還提供了析構成員函式,當物件被從記憶體中刪除時,該成員函式將會被自動呼叫。通常,在析構成員函式內,你可以填寫用來回收物件內部的動態空間的程式碼。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-958028/,如需轉載,請註明出處,否則將追究法律責任。

相關文章