java規定初始化

來源:互聯網
上載者:User

如果想自己為變數賦予一個初始值,又會發生什麼情況呢?為達到這個目的,一個最直接的做法是在類內部定義變數的同時也為其賦值(注意在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的每個對象都會獲得相同的初始化值。有時,這正是我們希望的結果,但有時卻需要盼望更大的靈活性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.