メンバ変数と静的メンバ変数の比較

オブジェクトのインスタンス(実体)を生成した際、メンバ変数はオブジェクトのインスタンス毎にメンバ変数を生成するのに対し、静的メンバ変数は全てのオブジェクトのインスタンスで同一の変数として共有する。

構文比較

メンバ変数

class クラス名 {
    データ型 変数名 =;
}

静的メンバ変数

class クラス名 {
    static データ型 変数名 =;
}

「static」修飾子を付け宣言する。

サンプル比較

varObject2.getMemberVar()の戻り値が、メンバ変数は「メンバ変数A」であるのに対し、静的メンバ変数は「静的メンバ変数B」である点に注目。

メンバ変数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package samplePackage;

public class SampleClass {

    public static void main( String[] args ){

        // オブジェクトのインスタンスを生成
        SampleClass2 varObject = new SampleClass2();

        // クラス「SampleClass2」のメンバ変数「varMember」の値を表示
        System.out.println( "varObject.varMemberの値は、「" + varObject.varMember + "」である。" );

        // クラス「SampleClass2」のメンバーメソッド「setMemberVar( "メンバ変数B" )」を実行。
        varObject.setMemberVar( "メンバ変数B" );
        // クラス「SampleClass2」のメンバーメソッド「getMemberVar()」の戻り値を表示
        System.out.println( "varObject.getMemberVar()の戻り値は、「" + varObject.getMemberVar() + "」である。" );

        // 別のオブジェクトのインスタンスを生成
        SampleClass2 varObject2 = new SampleClass2();
        // クラス「SampleClass2」のメンバーメソッド「getMemberVar()」の戻り値を表示
        System.out.println( "varObject2.getMemberVar()の戻り値は、「" + varObject2.getMemberVar() + "」である。" );

    }

static class SampleClass2 {

    // メンバ変数。
    String varMember = "メンバ変数A";

    void setMemberVar( String varArg ) {
        // メンバ変数に値を代入。
        varMember = varArg;
    }

    String getMemberVar() {
        // メンバ変数の値を返す。
        return varMember;
    }

}

}

実行結果

varObject.varMemberの値は、「メンバ変数A」である。
varObject.getMemberVar()の戻り値は、「メンバ変数B」である。
varObject2.getMemberVar()の戻り値は、「メンバ変数A」である。

静的メンバ変数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package samplePackage;

public class SampleClass {

    public static void main( String[] args ){

        // クラス「SampleClass2」の静的メンバ変数「varMember」の値を表示
        System.out.println( "SampleClass2.varMemberの値は、「" + SampleClass2.varMember + "」である。" );

        // オブジェクトのインスタンスを生成
        SampleClass2 varObject = new SampleClass2();

        // クラス「SampleClass2」のメンバーメソッド「setMemberVar( "静的メンバ変数B" )」を実行。
        varObject.setMemberVar( "静的メンバ変数B" );
        // クラス「SampleClass2」のメンバーメソッド「getMemberVar()」の戻り値を表示
        System.out.println( "varObject.getMemberVar()の戻り値は、「" + varObject.getMemberVar() + "」である。" );

        // 別のオブジェクトのインスタンスを生成
        SampleClass2 varObject2 = new SampleClass2();
        // クラス「SampleClass2」のメンバーメソッド「getMemberVar()」の戻り値を表示
        System.out.println( "varObject2.getMemberVar()の戻り値は、「" + varObject2.getMemberVar() + "」である。" );

    }

static class SampleClass2 {

    // 静的メンバ変数。
    static String varMember = "静的メンバ変数A";

    void setMemberVar( String varArg ) {
        // 静的メンバ変数に値を代入。
        varMember = varArg;
    }

    String getMemberVar() {
        // 静的メンバ変数の値を返す。
        return varMember;
    }

}

}

実行結果

SampleClass2.varMemberの値は、「静的メンバ変数A」である。
varObject.getMemberVar()の戻り値は、「静的メンバ変数B」である。
varObject2.getMemberVar()の戻り値は、「静的メンバ変数B」である。