Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース


メンバ変数の宣言

最小限として、メンバ変数宣言は、変数のデータ型とその名前の2つの構成要素を持っている。

type variableName;        // 最低限のメンバ変数宣言

最少の変数宣言は、ローカル変数あるいはメソッドパラメータのような Java プログラムの他の領域で使用される変数のために書く宣言のようである。 次のコードの一部は、クラス IntegerClass 内で anInteger の変数名で整数メンバ変数を宣言する。

class IntegerClass {
    int anInteger;
    . . .
    // ここでメソッドを定義する
    . . .
}

メンバ変数は、メソッド内ではなく、クラス実装の本体に宣言されるので注意すること。 クラス本体内でのこの位置決めが、変数がメンバ変数であると判定する。

Java の他の変数のように 、メンバ変数は型を持たなくてはならない。 変数の型は、変数に割り当てられる値とその変数に対する操作を決定する。 前述の変数とデータ型を参照することで、Java のデータ型に精通できる。

メンバ変数の名前は正当な Java の識別子であればよく、慣習的には小文字で始める(クラス名は一般に大文字から始まる)。 同じクラスに同一名で複数のメンバ変数を宣言することはできない。 しかし、メンバ変数とメソッドは同一名を持つことができる。 例えば、次のコードは正当である。

class IntegerClass {
    int anInteger;
    int anInteger() {        // メンバ変数と同名のメソッド
        . . .
    }
}

メンバ変数を宣言するときに、型と名前に加えて、他の属性を指定することができる。これには、他のオブジェクトがその変数にアクセス可能かどうか、変数はクラスあるいはインスタンス変数であるかどうか、変数が定数であるかどうかなどが含まれる。

要約すると、メンバ変数宣言は次のようになる。

[accessSpecifier] [static] [final] [transient] [volatile] type variableName

[ と ] の間の項目はオプションである。 イタリックの項目は、キーワードあるいは名前によって置換される。

メンバ変数宣言は次の変数の局面を定義する。


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: AVOGADRO

Transient 変数の宣言

デフォルトではメンバ変数は、オブジェクトの持続性のある状態である。 オブジェクトの持続性のある状態であるメンバ変数は、オブジェクトが保管される時には保存されなければならない。 Java の仮想マシンに示された変数がオブジェクトの持続性のある状態ではないことを表すために、 transient キーワードを使用する。

現時点では、 transient マーカは Java 実行時システムに無視される。 Java システムの将来のリリースでは、機能を保管している種々のオブジェクトを実装するために transient マーカを使用するであろう。

Java システムの他の変数修飾子のように、このようなクラスあるいはインスタンス変数を宣言するには transient を使用する。

class TransientExample {
    transient int hobo;
    . . .
}

この例では、TransientExample クラスの持続性のある状態でないことを hobo という整変数で宣言する。

Volatile 変数の宣言

同時にスレッドを実行することによって非同期に変更されるメンバ変数がクラスに含まれていると、これをJava 実行時システムに通知するために Java の volatile キーワードを使用する。

現時点では、Java ランタイムシステムは volatile マーカを無視する。 しかし、 Java ランタイムシステムの将来のリリースでは、volatile 変数が使用される前にメモリからロードされ、使用された後にメモリに格納されることを確認するためにこの情報を使用する。それによって、変数値が各スレッド内で矛盾がなく筋が通っていることが保証される。

次の変数宣言は、変数が並行スレッドによって非同期に変更できるように宣言する例である。

class VolatileExample {
    volatile int counter;
    . . .
}


Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース