如果想自己為變量賦予一個初始值,又會發生什麼情況呢?為達到這個目的,一個最直接的做法是在類內部定義變量的同時也為其賦值(注意在C++裡不能這樣做,盡管C++的新手們總“想”這樣做)。在下面,Measurement類內部的字段定義已發生了變化,提供了初始值:
class Measurement { boolean b = true; char c = 'x'; byte B = 47; short s = 0xff; int i = 999; long l = 1; float f = 3.14f; double d = 3.14159; //. . .
亦可用相同的方法初始化非基本(主)類型的對象。若Depth是一個類,那麼可象下面這樣插入一個變量並進行初始化:
class Measurement {
Depth o = new Depth();
boolean b = true;
// . . .
若尚未為o指定一個初始值,同時不顧一切地提前試用它,就會得到一條運行期錯誤提示,告訴你產生了名為“違例”(Exception)的一個錯誤(在第9章詳述)。
甚至可通過調用一個方法來提供初始值:
class CInit {
int i = f();
//...
}
當然,這個方法亦可使用自變量,但那些自變量不可是尚未初始化的其他類成員。因此,下面這樣做是合法的:
class CInit {
int i = f();
int j = g(i);
//...
}
但下面這樣做是非法的:
class CInit {
int j = g(i);
int i = f();
//...
}
這正是編譯器對“向前引用”感到不適應的一個地方,因為它與初始化的順序有關,而不是與程序的編譯方式有關。
這種初始化方法非常簡單和直觀。它的一個限制是類型Measurement的每個對象都會獲得相同的初始化值。有時,這正是我們希望的結果,但有時卻需要盼望更大的靈活性。