정적 변수의 초기화 순서와 문제

993 단어 정적 변수
먼저 코드를 보고 무엇을 출력할지 알아맞혀 보세요.
public  class Elvis{
	public static final Elvis INSTANCE=new Elvis();
	private static final int CURRENT_YEAR=Calendar.getInstance().get(Calendar.YEAR);
	private final int beltSize;
	private Elvis(){
		beltSize=CURRENT_YEAR-1930;
	}
	private int beltSize(){
		return beltSize;
	}
	
	public static void main(String args[]){
		System.out.println("Elvis wears a size : "+INSTANCE.beltSize()+" belt.");
	}
}

올해는 2014년이기 때문에 벨시즈의 결과가 84(2014-1930)라고 생각할 수도 있다.하지만 벨시즈가 -1930이라는 사실이 입증됐다.
원인 분석: public static final Elvis INSTANCE = new Elvis()를 실행합니다.함수를 구성할 때CURRENTYEAR가 0이 되었기 때문에 BeltSize는 -1930이 되었습니다.
 
사실 두 문장의 순서만 바꾸면 되고 클래스 초기화 순환 문제를 해결할 수 있다.
private static final int CURRENT_YEAR=Calendar.getInstance().get(Calendar.YEAR);
public static final Elvis INSTANCE=new Elvis();

좋은 웹페이지 즐겨찾기