Javaプログラミング初心者のためのページ -12ページ目

static変数-2

クラス変数は通常、『クラス名.クラス変数名』という形式でアクセスします。
クラス名の替わりにインスタンスを参照している変数を指定してもクラス変数にアクセスできますが、
紛らわしいため推奨されません。

問題:以下の2つの代入文の説明として正しいものはどれか?
①x.s=100;
②x.i=100;
A. ①も②も実行可能
B. ①のみコンパイルエラー
C. ②のみコンパイルエラー
D. ①も②もコンパイルエラー



class M{
    public static void main(String[] args) {
        X x = new X();
        x.s = 100;
        x.i = 100;
    }
}

class X{
    static int s;
    int i;
}












正解:
A. ①も②も実行可能

static変数

staticを付けて定義した変数をクラス変数といいます。
インスタンス変数はインスタンスオブジェクトを作成しないと使用できませんが、クラス変数はインスタンスオブジェクトを作成しなくても使用できます。
通常、『クラス名.クラス変数名』という形式で使用します。


問題:以下のクラスXが定義されているとき、どちらの記述方法が正しいか?
① X.s = 100;
② X.i = 100;

class X{
static int s;
int i;
}















正解:
① X.s = 100;

変数の種類

メソッド内で定義した変数をローカル変数といいます。
メソッドの外で、キーワードstaticを付けないで定義した変数をインスタンス変数といいます。
メソッドの外で、キーワードstaticを付けて定義した変数をクラス変数といいます。


問題:以下のクラス定義において、次のA.~D.に該当する変数はどれか。それぞれ回答せよ。
A. ローカル変数
B. インスタンス変数
C. クラス変数
D. コンパイルエラー


=== ソースコード
class X{
    static int x1;
    int x2;
    void m(){
        int x3;
        static int x4;
    }
}


















解答:
A. ローカル変数   ・・・ x3
B. インスタンス変数 ・・・ x2
C. クラス変数    ・・・ x1
D. コンパイルエラー ・・・ x4