6.2.3 成員變量
最 簡(jiǎn) 單 的 成 員 變 量 的 聲 明 為 :
type variableName;
如 在 例 6.1中 所 聲 明 的 變 量 ,int x,y;
成員變量的類型可以是Java中的任意數(shù)據(jù)類型包括簡(jiǎn)單類型、數(shù)組、類和接口 。在一個(gè)類中,成員變量應(yīng)該是的,但是成員變量的名字可以和類中某個(gè)方法的名字相同,例如 :
class Point{
int x,y;
int x(){
return x;
}
}
其 中 ,方 法 x()和 變 量 x具 有 相 同 的 名 字 。
類的成員變量和在方法中所聲明的局部變量是不同的,成員變量的作用域是整個(gè)類,而局部變量的作用域只是方法內(nèi)部。對(duì)一個(gè)成員變量,我們還可以限定它的訪問(wèn)權(quán)限(見(jiàn)6.6),用static限定它為類變量 (見(jiàn) 6.7),或者用以下的修飾符限定:final:用來(lái)聲明一個(gè)常量,如 :
class FinalVar{
final int CONSTANT = 50;
……
}
例中聲明了常量CONSTANT, 并賦值為50。 對(duì)于用fina限定的常量 ,在程序中不能改變它的值 。通常常量名用大寫(xiě)字母 。
6.2.4構(gòu)造方法
構(gòu)造方法是一種特殊的方法。Java中的每個(gè)類都有構(gòu)造方法,用來(lái)初始化該類的一個(gè) 新的對(duì)象。構(gòu)造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型,在構(gòu)造方法的實(shí)現(xiàn)中,也可以進(jìn)行方法重寫(xiě)。
例6.5
class point {
int x,y;
point (){
x=0; y=0;
}
point (int x, int y){
this.x=x; this.y=y;
}
}
上 例中,我們對(duì)類Point實(shí)現(xiàn)了兩個(gè)構(gòu)造方法,方法名均為Point,與類名相同。而且我們使 用了方法重寫(xiě),根據(jù)不同的參數(shù)分別對(duì)點(diǎn)的x、y坐標(biāo)賦與不同的初值 。
回憶在例6.2中,我們?cè)胕nit()方法對(duì)點(diǎn)的x、y坐標(biāo)進(jìn)行初始化。 二者完成相同的功能,那么用構(gòu)造方法的好處在哪里呢?
當(dāng) 用 運(yùn) 算 符 new為 一 個(gè) 對(duì) 象 分 配 內(nèi) 存 時(shí) ,要 調(diào) 用 對(duì) 象 的 構(gòu) 造 方 法 ,而當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),必須用new為它分配內(nèi)存。因此用構(gòu)造方法進(jìn)行初始化避免了在生成對(duì)象后每次都要調(diào)用對(duì)象的初始化方法。如果沒(méi)有實(shí)現(xiàn)類的構(gòu)造方法,則Java運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)提供缺省的構(gòu)造方法,它沒(méi)有任何參數(shù) 。
另外,構(gòu)造方法只能由new運(yùn)算符調(diào)用。我們將在§6.3中進(jìn)行詳細(xì)介紹。對(duì)構(gòu)造方法同樣也有訪問(wèn)權(quán)限的限制(見(jiàn)§6.6)。
6.2.5 finalize()方法
在對(duì)對(duì)象進(jìn)行垃圾收集前,Java運(yùn)行時(shí)系統(tǒng)回自動(dòng)調(diào)用對(duì)象的finalize()方法來(lái)釋放系統(tǒng)資源,如打開(kāi)的文件或socket。 該方法的聲明必須如下所示 :
protected void finalize() throws throwable
finalize()方 法 在 類 java.lang.Object中實(shí)現(xiàn)。如果要在一個(gè)所定義的類中實(shí)現(xiàn)該方法以釋放 該類所占用的資源(即要重載父類的finalize()方法),則在對(duì)該類所使用的資源進(jìn)行翻譯后,一 般要調(diào)用父類的finalize()方法以清除對(duì)象使用的所有資源,包括由于繼承關(guān)系而獲得的資源。通常的格式應(yīng)為:
protected void finalize () throws throwable{
…… // clean up code for this class
super. finalize();
}
該例中,通過(guò)super來(lái)調(diào)用其父類的 finalize()方法,有關(guān)super我們將在§6.4中講述,對(duì)類java.lang.Ob-ject,我們也將在§6.4中講述。

