トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Javaの文法:ローカル変数とメンバ変数

ローカル変数とメンバ変数

 変数のスコープ

スコープ
変数の有効範囲、その変数が利用できる範囲
  • Javaにおけるスコープは基本的に{}の間
1
2
3
4
5
6
7
8
9
10
11
package sample.basic;

public class Scope {
    public static void main(String[] args) {
        {    //変数iが有効なのは{}の間のみ
            int i=5;
            System.out.println("変数iは"+i);
        }
//        System.out.println("変数iは"+i);    //ここではiの値を取得できないため
    }
}
  • 今まで出てきた変数→ローカル変数
  • クラス内でメソッドの外→メンバ変数(フィールド、グローバル変数)

 メンバ変数

メンバ変数のあるクラスの一般的な例

<修飾子> class <クラス名> {
	<修飾子> <変数の型> <変数名>;
}

クラス変数

  • 変数の修飾子としてstatcキーワードを付与することで、クラス自体に付随するフィールドとなる
  • 同じクラスからインスタンス化された全てオブジェクトで共通の変数となる
  • インスタンス化しなくてもアクセスできる
  • Eclipseでは斜体で表示されるため、クラス変数が区別しやすい
1
2
3
4
5
6
7
8
package sample.object;

public class ClassVariable {
    static String string="これはクラス変数です。であるため、インスタンス化しなくてもアクセスできます。";
    public static void main(String[] args) {
        System.out.print(string);
    }
}
  • インスタンス化された各オブジェクトからもクラス変数にはアクセスできるが、インスタンス変数と区別がつきにくくなるため、<オブジェクト名>.<クラス変数>ではなく<クラス名>.<クラス変数>としてアクセスする。
    • Eclipseでは「staticフィールドにはstaticアクセスする必要があります」という警告が出る

インスタンス変数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package sample.object;

public class InstanceVariable {
    //この例は理解しやすいように変数名に日本語を使っていますが、
    //普通のプログラムでは日本語名を使わないほうがいいです。
    static     String クラス変数="これはクラス変数です。であるため、インスタンス化しなくてもアクセスできます。";
    String インスタンス変数;
    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        System.out.println(クラス変数);

        InstanceVariable インスタンスA = new InstanceVariable();
        インスタンスA.インスタンス変数="「これはインスタンスAのインスタンス変数です」";
        System.out.println("インスタンスAのインスタンス変数の値は"+インスタンスA.インスタンス変数);
        
        インスタンスA.クラス変数="クラス変数の値を変えてみます";
        
        InstanceVariable インスタンスB = new InstanceVariable();
        インスタンスB.インスタンス変数="「これはインスタンスBのインスタンス変数です」";
        System.out.println("インスタンスBのインスタンス変数の値は"+インスタンスB.インスタンス変数);
        
        System.out.println(インスタンスB.クラス変数);
    }
}

 特殊な変数:this

  • インスタンス化されたオブジェクト自身を示す変数。

 フィールドの例

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
package sample.object;

public class Ranger {
    int height;
    int weight;
    int age;
    String call;
    public Ranger(int height,int weight, int age,String call) {
        this.height=height;
        this.weight=weight;
        this.age=age;
        this.call=call;
    }
    public static void main(String[] args) {
        Ranger red=new Ranger(175,70,22,"赤レンジャー、参上!");
        Ranger blue=new Ranger(190,65,25,"青レンジャー、到着!");
        Ranger yellow=new Ranger(168,99,22,"黄レンジャー、見参!");
        Ranger pink=new Ranger(165,45,20,"桃レンジャー、来たわよ!");
        Ranger brown=new Ranger(166,68,64,"茶レンジャーが来たぜよ!");
        System.out.println(red.call);
        System.out.println(blue.call);
        System.out.println(yellow.call);
        System.out.println(pink.call);
        System.out.println(brown.call);
        System.out.println("解説しよう・・・赤レンジャーの身長は"+red.height+"である");
    }
}

 課題

  1. 5レンジャーのプログラムで、「茶レンジャー」の年齢を表示するようにプログラムを修正しなさい。
ClassVariable.java InstanceVariable.java Ranger.java Scope.java

最終更新時間:2007年06月27日 23時43分38秒