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 변수도 함께 로딩된다.