![]() ![]() ![]() ![]() | オブジェクト、クラス、インタフェース |
最小限として、メンバ変数宣言は、変数のデータ型とその名前の2つの構成要素を持っている。最少の変数宣言は、ローカル変数あるいはメソッドパラメータのような Java プログラムの他の領域で使用される変数のために書く宣言のようである。 次のコードの一部は、クラスtype variableName; // 最低限のメンバ変数宣言IntegerClass
内でanInteger
の変数名で整数メンバ変数を宣言する。メンバ変数は、メソッド内ではなく、クラス実装の本体に宣言されるので注意すること。 クラス本体内でのこの位置決めが、変数がメンバ変数であると判定する。class IntegerClass { int anInteger; . . . // ここでメソッドを定義する . . . }Java の他の変数のように 、メンバ変数は型を持たなくてはならない。 変数の型は、変数に割り当てられる値とその変数に対する操作を決定する。 前述の変数とデータ型を参照することで、Java のデータ型に精通できる。
メンバ変数の名前は正当な Java の識別子であればよく、慣習的には小文字で始める(クラス名は一般に大文字から始まる)。 同じクラスに同一名で複数のメンバ変数を宣言することはできない。 しかし、メンバ変数とメソッドは同一名を持つことができる。 例えば、次のコードは正当である。
メンバ変数を宣言するときに、型と名前に加えて、他の属性を指定することができる。これには、他のオブジェクトがその変数にアクセス可能かどうか、変数はクラスあるいはインスタンス変数であるかどうか、変数が定数であるかどうかなどが含まれる。class IntegerClass { int anInteger; int anInteger() { // メンバ変数と同名のメソッド . . . } }要約すると、メンバ変数宣言は次のようになる。
[ と ] の間の項目はオプションである。 イタリックの項目は、キーワードあるいは名前によって置換される。[accessSpecifier] [static] [final] [transient] [volatile] type variableNameメンバ変数宣言は次の変数の局面を定義する。
- accessSpecifier は、他のどのクラスが変数にアクセスできるかを定義する。 同じ指示子を使用してメソッドのアクセスを制御する。クラスのメンバへのアクセスの制御では、メンバ変数とメソッドのアクセス制御の方法について説明する。
static
は、変数がインスタンスメンバ変数と対照した場合のクラスメンバ変数であることを表す。 クラスメソッドを宣言するためにもstatic
を使用する。インスタンスとクラスメンバ では、インスタンスとクラス変数の宣言や、インスタンスとクラスメソッドの書き方について説明する。
final
は変数が定数であることを表す。
transient
変数は、オブジェクトの持続性のある状態ではない。
volatile
は変数が非同期に変更されることを意味する。
final、transient、volatile 変数について以下で説明する。定数の宣言
Java において定数メンバ変数を作成するには、変数宣言でキーワードfinal
を使用する。 次の変数宣言はAVOGADRO と指定された定数を定義する。その値は Avogadro の数(6,023 x 10^23)であって、変更することができない。慣習により、定数値の名前はすべての大文字でつづられる。 プログラムが定数を変更しようとすると、コンパイラは次のようなエラーメッセージを表示して、プログラムのコンパイルを拒否する。class Avo { final double AVOGADRO = 6.023e23; }AvogadroTest.java:5: Can't assign a value to a final variable: AVOGADROTransient 変数の宣言
デフォルトではメンバ変数は、オブジェクトの持続性のある状態である。 オブジェクトの持続性のある状態であるメンバ変数は、オブジェクトが保管される時には保存されなければならない。 Java の仮想マシンに示された変数がオブジェクトの持続性のある状態ではないことを表すために、transient
キーワードを使用する。現時点では、
transient
マーカは Java 実行時システムに無視される。 Java システムの将来のリリースでは、機能を保管している種々のオブジェクトを実装するためにtransient
マーカを使用するであろう。Java システムの他の変数修飾子のように、このようなクラスあるいはインスタンス変数を宣言するには
transient
を使用する。この例では、TransientExample クラスの持続性のある状態でないことをclass TransientExample { transient int hobo; . . . }hobo
という整変数で宣言する。Volatile 変数の宣言
同時にスレッドを実行することによって非同期に変更されるメンバ変数がクラスに含まれていると、これをJava 実行時システムに通知するために Java のvolatile
キーワードを使用する。現時点では、Java ランタイムシステムは
volatile
マーカを無視する。 しかし、 Java ランタイムシステムの将来のリリースでは、volatile 変数が使用される前にメモリからロードされ、使用された後にメモリに格納されることを確認するためにこの情報を使用する。それによって、変数値が各スレッド内で矛盾がなく筋が通っていることが保証される。次の変数宣言は、変数が並行スレッドによって非同期に変更できるように宣言する例である。
class VolatileExample { volatile int counter; . . . }
![]() ![]() ![]() ![]() | オブジェクト、クラス、インタフェース |