staticメンバ(クラスメンバ)
インスタンスメンバ
public class AccessTest {
// インスタンス変数
int instanceVar;
// クラス変数(static変数)
static int staticVar;
// OK: インスタンスメンバ(メソッドと変数)同士は直接アクセス可能
// 同一のオブジェクト内に格納されているため
int instanceVarGetter() {
return instanceVar;
}
// OK: インスタンスメンバは、staticメンバに直接アクセス可能
// インスタンスは、その親であるクラスの持ち物を受け継いでいるため(?)
int staticVarGetter() {
return staticVar;
}
// ERROR: staticメンバは、インスタンスメンバに直接アクセス不可能
// インスタンスメンバはインスタンス内に閉じ込められているため
static int instanceVarGetter_staticVersion() {
return instanceVar;
}
// OK: staticメンバ同士は直接アクセス可能
// どちらも同一のクラスにあるため
static int staticVarGetter_staticVersion() {
return staticVar;
}
// OK: インスタンス経由なら、staticメンバもインスタンスメンバにアクセスできる
static int instanceVarGetter_afterGenerate() {
AccessTest obj = new AccessTest();
return obj.instanceVar;
}
}
class Variables {
static String staticVar = "static変数";
String instanceVar = "instance変数";
}
public class Main {
public static void main(String[] args) {
Variables obj = null;
// RESULT: static変数
// staticメンバはクラスさえ読み込まれれば利用可能
System.out.println(obj.staticVar);
// ERROR: java.lang.NullPointerException
// インスタンスメンバを保持するオブジェクトが空(null)なため
System.out.println(obj.instanceVar);
}
}