class Foo{
public static String classVar = "I class var";
public String instanceVar = "I instance var";
public static void classMethod() {
System.out.println(classVar); // 가능
// System.out.println(instanceVar); // 불가
}
public void classMethod2() {
System.out.println(classVar); // 가능
// System.out.println(instanceVar); // 가능
}
}
public class StaticApp {
public static void main(String[] args) {
System.out.println(Foo.classVar); // 가능
// System.out.println(Foo.instanceVar); // 불가
Foo.classMethod(); // 가능
// Foo.classMethod2(); // 불가
Foo f1 = new Foo();
Foo f2 = new Foo();
System.out.println(f1.classVar); // classVar
System.out.println(f1.instanceVar); // instanceVar
f1.classVar = "changed by f1";
System.out.println(Foo.classVar); // changed by f1
System.out.println(f2.classVar); // changed by f1
f1.instanceVar = "changed by f1";
System.out.println(f1.instanceVar); // changed by f1
System.out.println(f2.instanceVar); // instanceVar
}
}
클래스 메서드에서 인스턴스 변수에 접근하지 못하는 이유
this : 클래스가 인스턴스화 되었을 때에 인스턴스를 가리키는 특수한 이름