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

