변수종류 | 자동초기화 | 초기화 시점 | 메모리영역 | 소멸시점 |
스태틱변수 | o | 클래스로드 시 | 메서드 | 클래스언로드시 |
인스턴스변수 | o | 객체 생성 시 | 힙 | 객체소멸시 |
매개변수/지역변수 | x | 스택 | 메서드종료시 |
class A{
static int si; // 스태틱 변수
int i; //인스턴스 변수
//스태틱 메서드
static void sm() { //인스턴스변수, this 사용불가
//인스턴스 변수 사용가능
System.out.println(si);
}
//인스턴스 메서드
void m(){
System.out.println(this.i); //인스턴스 변수 사용 가능
}
}
public class StaticTest {
public static void main(String[] args) {
System.out.println(A.si);
//System.out.println(A.i); 객체 생성하지 않고 인스턴스 변수는 접근 불가능
A a1, a2;
a1 = new A();
a2 = new A();
System.out.println(a1.i);//0
System.out.println(a2.i); //0
//System.out.println(a1.si); //
//System.out.println(a2.si);
System.out.println(A.si);
a1.i++;
a1.si++;
System.out.println(a1.i); //1
System.out.println(a1.si); //1
System.out.println(A.si); //1
System.out.println(a2.i); //0
System.out.println(a2.si); //1
//스태틱 변수는 공유함을 알 수 있음
a1.m();
//A.m() 불가능한 호출, 객체생성 후에 호출 가능
}
}