首頁
中文書目錄
原文書目錄
 站內快速搜尋
資源中心
Book Series
Special Interest













■好消息,歐萊禮書籍已重新鋪貨至各大書局及網路書店,歡迎讀者選購       ■歡迎各院校採用歐萊禮書籍,學校團購請洽校園服務團隊

[技術短文]

變數的種類


本文章嘗試著為變數的種類做一個總整理,以期讓讀者能充分掌握每一種變數的特性。

根據宣告方式來為變數分類
根據宣告方式詳細來區分,Java 的變數有七種,下面的程式碼展示了這七種變數的宣告方式:
class MyClass {
  static int a;
  int b;
  public static void myMethod(int c) {
      try {
int d;
     } catch (Exception e) {
     }
  }
   MyClass(int f) {
     int[] g = new int[100];
  }
}
  • class variable:宣告在 class 內,method 之外,且使用 static 修飾的變數,例如上面程式碼的 a。
  • instance variable:宣告在 class 內,method 之外,且未使用 static 修飾的變數,例如上面程式碼的 b。
  • method parameter:宣告在 method 小括號內的變數,例如上面程式碼的 c。
  • 狹義的區域變數(local variable):宣告在 method 內的變數,例如上面程式碼的 d 與 g。
  • exception-handler parameter:宣告在 catch 小括號內的變數,例如上面程式碼的 e。
  • constructor parameter:宣告在 constructor 小括號內的變數,例如上面程式碼的 f。
  • 陣列元素(array component):陣列的元素值沒有識別名稱,必須透過陣列和索引值(index)來識別。例如上面程式碼的 g[0]。
根據變數記憶體來分類
根據變數記憶體位置來區分,Java 的變數有兩種,包括了:
  • heap variable:佔用的記憶體在 heap 中,這類變數包括了 class variable、instance variable、array component,即前面程式的 a, b, g[0]。這類變數會自動被 JVM 初始化成預設值。
  • stack variable:通稱廣義的區域變數(pan-local variable),其佔用的記憶體在 stack 中,這類變數包括了狹義的區域變數、method parameter、exception-handler parameter、constructor parameter,即前面程式的 c, d, e, f。狹義的區域變數不會被 JVM 初始化成預設值,使用者必須自行初始化該變數,但是 parameter 類(包括 method parameter、exception-handler parameter、constructor parameter)會被 JVM 初始化成傳入值。
根據使用方式來為變數分類
根據使用方式,只要分成三類即可,分別是:
  • class variable:即上例的 a。
  • instance variable:即上例的 b。
  • 廣義的區域變數:包含上例的 c、d、e、f。這四者的差別很小,直接歸為一類。
至於「陣列元素」(array component)則不在此三類中,但是「陣列元素」並不常被注意到,為它多分出一類的用處不高。我通常將陣列視為物件,將 array component 視為物件的 instance variable。

本文作者:蔡學鏞
張貼日期:12/06/01

| 首頁 | 聯絡我們 |
© 2009, O'Reilly Media, Inc. Taiwan Branch