[java] 자바 static 변수의 접근방법과 초기화 시점

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

답글 남기기