Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Java基本 > クラス −4.メンバ変数
更新日:2005/7/25
クラス−4.メンバ変数
このページではクラスの主要構成要素の一つであるメンバ変数の概要、宣言方法について説明します。メンバ変数の参照方法についてはJavaの道:オブジェクトを参照してください。
概要
メンバ変数はオブジェクトの状態を保持する変数です。オブジェクトに属し、どのメソッド、コンストラクタにも属しません。そのため、メンバ変数は複数のメソッド、コンストラクタで共通して使用することができます。Javaの変数にはメンバ変数の他にローカル変数があります。逆にローカル変数は各メソッド、コンストラクタに限定して使用する変数で他のメソッド、コンストラクタから使用することはできません。

メンバ変数のスコープはメンバ変数を宣言したクラスの{ }内です。ローカル変数のスコープはローカル変数を宣言したメソッド、コンストラクタの{ }内です
【例1】メンバ変数とローカル変数の違いを表した例です。
public class ExClass4 {
 //メンバ変数
 int memberVar = 10;  //(1)
 void methodA() {
  //methodAに属するローカル変数localVarA
  int localVarA = 20;  //(4)
  System.out.println("メンバ変数(memberVar):" + memberVar); //(5)
  System.out.println("ローカル変数(localVarA):" + localVarA); //(6)
//System.out.println("ローカル変数(localVarB):" + localVarB); //(7)
 }
 void methodB() {
  //methodBに属するローカル変数localVarB
  int localVarB = 20;  //(9)
  System.out.println("メンバ変数(memberVar):" + memberVar); //(10)
//System.out.println("ローカル変数(localVarA):" + localVarA); //(11)
  System.out.println("ローカル変数(localVarB):" + localVarB); //(12)
 }
 public static void main(String[] args) {
  ExClass4 object4 = new ExClass4();  //(2)
  object4.methodA();  //(3)
  object4.methodB();  //(8)
 }
}
【解説1】
(1). メンバ変数memberVarを宣言し、値10を代入します。
(2). ExClasss4クラスのオブジェクトobject4を宣言・生成します。
(3). methodAの実行を行います。
(4). methodA内でローカル変数localVarAを宣言し、値20を代入します。
(5). メンバ変数memberVarの表示を行います。メンバ変数はどのメソッドにも属さずどのメソッドからも参照できるため、 正しく10が表示されます。
(6). ローカル変数localVarAの表示を行います。localVarAはメソッドmethodAに属するローカル変数のため、正しく20が表示されます。
(7). ローカル変数localVarBの表示を行います。localVarBはメソッドmethodBに属するローカル変数のため、methodAから参照することはできません。コンパイルエラーとなります。
(8). methodBの実行を行います。
(9). methodB内でローカル変数localVarBを宣言し、値20を代入します。
(10). メンバ変数memberVarの表示を行います。メンバ変数はどのメソッドにも属さずどのメソッドからも参照できるため、 正しく10が表示されます。
(11). ローカル変数localVarAの表示を行います。localVarAはメソッドmethodAに属するローカル変数のため、methodBから参照することはできません。コンパイルエラーとなります。
(12). ローカル変数localVarBの表示を行います。localVarBはメソッドmethodBに属するローカル変数のため、正しく20が表示されます。
【実行結果1】

D:\JAVA>javac ExClass4.java

D:\JAVA>java ExClass4
メンバ変数(memberVar):10
ローカル変数(localVarA):20
メンバ変数(memberVar):10
ローカル変数(localVarB):20

D:\JAVA>

宣言
以下の枠内がメンバ変数を宣言する時のフォーマットです。int、doubleなどの基本型だけでなく、オブジェクト、配列、インタフェースの変数も宣言できます。
型 変数名;
【メンバ変数宣言時に付与できる修飾子】※修飾子は上から宣言する順に並んでいます。
修飾子
説明
アクセスレベル
アクセスレベルを指定することにより、メンバ変数を他のクラスから参照できないなどを指定できるようになります。詳細はアクセスレベルを参照してください。
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の代入を行います。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道