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節で例外が捉えられる毎に作成されます。
- 局所変数(local variable)は局所変数宣言文で宣言されます。
局所変数宣言文が変数を初期化する式を含んでいても構いません。しかし、それを宣言した局所変数宣言文が実行されるまでは初期化式を伴う局所変数は初期化されません。(確実な代入の規則は局所変数の値が初期化される値が代入される前に使用されることを防ぎます。)局所変数はそのブロックやfor文が完了すると効率的に存在を終えます。
1つの特別な状況がなければ、局所変数はその局所変数宣言文が実行される時に作成されると常に考えることができました。特別な状況とはswitch文です。ここでは局所変数宣言文の実行を飛ばしてブロックの中に入る制御が可能です。しかし、確実な代入の規則で記述される制約により、そのような飛ばされる局所変数宣言文で宣言される局所変数は、代入式により値を確実に代入されるまで、使用することができません。
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; } }