static 변수
– 인스턴스 생성과는 무관하게 초기화 되는 변수
– static 변수가 속한 클래스의 인스턴스가 여러번 생성되어도 static 변수는 하나만 존재
– public 으로 선언되면 어디서든 접근가능
아래 코드를 실행하면 num의 값이 공유되고 있음을 알 수 있다.
public class AAA { public static void main(String[] args){ BBB b1=new BBB(); BBB b2=new BBB(); BBB b3=new BBB(); } } class BBB { static int num=0; public BBB() { num++; System.out.println("num: "+num); } }
static 변수의 접근방법
– 클래스 내부에서 직접접근
– 인스턴스 생성후 접근 > 일반변수와의 구분이 어렵기 때문에 권장하지 않는다.
– 클래스의 이름으로 접근
public class AAA { public static void main(String[] args){ BBB b1=new BBB(); b1.num++; // 인스턴스 생성 후 접근 System.out.println(b1.num); BBB.num++; // 클래스 이름으로 접근 System.out.println(BBB.num); } } class BBB { static int num=0; BBB() { num++; // 클래스 내부에서 직접접근 System.out.println(num); } }
static 변수의 초기화 시점
– JVM은 실행과정에서 필요한 클래스의 정보를 한꺼번에 모두 올리는 것이 아니라 순차적으로 메모리에 로딩한다.
따라서 static 변수가 속한 클래스의 정보가 처음으로 필요로 하게되는 그순간에 static 변수도 함께 로딩된다.