akios @ ウィキ

4.12.3. 変数の種類

最終更新:

akios

- view
管理者のみ編集可

4. 型と値と変数

4.1. 型と変数の種類

4.2. プリミティブ型と値

4.3. 参照型と値

4.4. 型変数

4.5. 引数付き型

4.6. 型の抹消

4.7. 具象可能型

4.8. 未加工型

4.9. 交差型

4.10. サブタイプ化

4.11. 型の使用箇所

4.12. 変数

4.12.1. プリミティブ型の変数

4.12.2. 参照型の変数

4.12.3. 変数の種類


変数には7つの種類があります。:
  • クラス変数(class variable)はクラス宣言内でキーワードstaticを使用して宣言されたフィールド(8.3.1.1.)、もしくはインタフェース宣言内でキーワードstaticを使用してまたは使用せず宣言されたフィールド(9.3.)です。
  クラス変数はそのクラスやインタフェースが準備されデフォルト値に初期化される時に作成されます。クラス変数はその変数やインタフェースがロード解除された場合に効率的に存在を終えます。

  • インスタンス変数(instance variable)はキーワードstatic(8.3.1.1.)を使用せずにクラス宣言内で宣言されたフィールドです。
  インスタンス変数であるフィールドaを持つクラスTがあるならば、新規インスタンス変数aは、クラスTまたはTのサブクラスのオブジェクトが新規に作成される毎に、作成されデフォルト値に初期化されます。インスタンス変数はそのフィールドを持つオブジェクトが参照されなくなると、必要なオブジェクトの終了化子が実行された後に、効率的に存在を終えます。

  • 配列要素(array component)は名前のない変数です。配列の新規オブジェクトがされる毎に作成されデフォルト値に初期化されます(15.10.)。配列要素はその配列が参照されなくなると効率的に存在を終えます。

  • メソッド引数(method parameter)(8.4.1.)はメソッドに渡される実引数の値につけれる名前です。
  メソッド宣言内で宣言される全ての引数に対して、メソッドが呼び出される毎に新たな引数の変数が作成されます。新たな変数はメソッド呼び出しの対応する実引数値で初期化されます。メソッド引数はメソッド本体の実行が完了したら効率的に存在を終えます。

  • コンストラクター引数(constructor parameter)(8.8.1)はコンストラクターに渡される実引数の値につけられる名前です。
  コンストラクター宣言内で宣言される全ての引数に対して、クラスインスタンス作成式明示的コンストラクター呼び出しでそのコンストラクターが実行される毎に新たな引数の変数が作成されます。新たな変数は作成式やコンストラクター呼び出しの対応する実引数値で初期化されます。コンストラクター引数はコンストラクター本体の実行が完了したら効率的に存在を終えます。

  • 例外引数(exception parameter)try文catch節で例外が捉えられる毎に作成されます。
  新たな変数は例外と関連した実オブジェクトと共に初期化されます(11.3.14.1.)。例外引数はcatch節と関連づいたブロックの実行が完了したら効率的に存在を終えます。

  制御フローがあるブロックfor文に入ったら、そのブロックやfor文にある局所変数宣言文で宣言される全ての局所変数は直ちに作成されます。

  局所変数宣言文が変数を初期化する式を含んでいても構いません。しかし、それを宣言した局所変数宣言文が実行されるまでは初期化式を伴う局所変数は初期化されません。(確実な代入の規則は局所変数の値が初期化される値が代入される前に使用されることを防ぎます。)局所変数はそのブロックやfor文が完了すると効率的に存在を終えます。

  1つの特別な状況がなければ、局所変数はその局所変数宣言文が実行される時に作成されると常に考えることができました。特別な状況とはswitch文です。ここでは局所変数宣言文の実行を飛ばしてブロックの中に入る制御が可能です。しかし、確実な代入の規則で記述される制約により、そのような飛ばされる局所変数宣言文で宣言される局所変数は、代入式により値を確実に代入されるまで、使用することができません。

例4.12-3-1. 異なる種類の変数

class Point {
    static int numPoints;   // numPoints is a class variable
    int x, y;               // x and y are instance variables
    int[] w = new int[10];  // w[0] is an array component
    int setX(int x) {       // x is a method parameter
        int oldx = this.x;  // oldx is a local variable
        this.x = x;
        return oldx;
    }
}

4.12.4. final変数

4.12.5. 変数の初期値

4.12.6. 型とクラスとインタフェース

目安箱バナー