メンバ変数
このページではメンバ変数の概要、メンバ変数とローカル変数の違い、メンバ変数宣言時に付与できる修飾子について説明します。メンバ変数の参照方法についてはJavaの道:インスタンスを参照してください。
概要
クラスには、そのクラスの"状態"と"振る舞い"を定義します。メンバ変数は、その内クラスの"状態"を定義するものです。
※メンバ変数は、フィールドとも言います。
メンバ変数は、int、doubleなどの基本型だけでなく、クラス型、配列型の変数も宣言できます。
【例1】メンバ変数の宣言例
class Example {
int exValue = 100; //値100の状態を持つメンバ変数
void exShow() { //exValueを表示するメソッド
System.out.println(this.exValue);
}
}
メンバ変数とローカル変数の違い
メンバ変数は、クラスの"状態"を定義するものであり、そのクラスの状態を参照しようとする他のメソッド、コンストラクタからも参照できます。 一方、ローカル変数は、各メソッド、コンストラクタの状態を定義する変数で、それぞれのメソッド、コンストラクタ内からしか参照できません。ローカル変数が参照できる範囲はローカル変数を宣言したメソッド、コンストラクタの{ }内です。
メンバ変数とローカル変数の違いを表した例です。
ExClass4クラス
public class ExClass4 {
int memberVar = 10; //メンバ変数memberVarを宣言
void methodA() {
int localVarA = 20; //ローカル変数localVarAを宣言
//メンバ変数なので他のmethodAから参照可能
System.out.println("メンバ変数(memberVar):" + this.memberVar);
//methodA内に宣言したローカル変数なのでmethodAから参照可能
System.out.println("ローカル変数(localVarA):" + localVarA);
//methodA内に宣言したローカル変数ではないのでmethodAから参照不可
//System.out.println("ローカル変数(localVarB):" + localVarB);
}
void methodB() {
int localVarB = 20; //ローカル変数localVarBを宣言
}
}
Mainクラス
class Main {
public static void main(String[] args) {
ExClass4 ins1 = new ExClass4();
ins1.methodA();
}
}
実行結果
C:\java\source>javac Main.java
C:\java\source>java Main
メンバ変数(memberVar):10
ローカル変数(localVarA):20
メンバ変数宣言時に付与できる修飾子
メンバ変数宣言時に修飾子を付けることによりメンバ変数に様々な役割を持たせることができます。詳細な説明はここでは省略します。
メンバ変数宣言時に付与できる修飾子
※ 修飾子は上から宣言する順に並んでいます。
修飾子 | 説明 |
---|---|
アクセスレベル | アクセスレベルを指定することにより、メンバ変数を他のクラスから参照できないなどを指定できるようになります。詳細はアクセスレベルを参照してください。 |
static | メンバ変数がインスタンス変数ではなく、クラス変数であることを表します。クラス変数の詳細はstaticを参照してください。 |
final | finalをつけると変数に一度値が生成されるとその値を変更できず定数として扱われます。詳細はfinalを参照してください。 |
transient | シリアライズすべきでないメンバ変数を表します。 |
volatile | メンバ変数に対して、コンパイラが何らかの最適化を施すことを防止します。 |
型 変数名 | メンバ変数宣言における必須項目です。int、double、クラス名などそのメンバ変数型とメンバ変数名を指定します。型は宣言時の必須項目です。 |
【例2】メンバ変数の宣言例です。
public static int memberA = 20;
//アクセスレベルがpublic(どのクラスからも参照可)で、int型のクラスメンバ変数memberAを宣言し、
//値20を代入しています。
final Integer MEMBERB = new Integer(30);
//final修飾子を使用し、値の変更ができないInteger型のメンバ変数MEMBERBを宣言し、
//new演算子により値30を持つオブジェクトを生成しています。
private double memberC;
memberC = 1.34;
//アクセスレベルがprivate(同クラス内からしか参照できない)で、
//double型のメンバ変数memberCを宣言しています。その後、memberCに値1.34の代入を行います。
5メンバ変数