2009-09-04 2 views
10

Java에서 열거 형 상수의 생성자는 언제 호출됩니까?

Java에서 고안된 예제를 사용하려면 다음 코드를 사용하십시오.

enum Commands{ 
    Save("S"); 
    File("F"); 

    private String shortCut; 
    private Commands(String shortCut){ this.shortCut = shortCut; } 
    public String getShortCut(){ return shortCut; } 
} 

다음 테스트/드라이버 코드가 있습니다.

public static void main(String args[]){ 
    System.out.println(Commands.Save.getShortCut()); 
} 
Java에서 생성자는 언제입니까? 열거 된 상수가 호출 되었습니까? 위의 예제에서 Save 열거 형 상수 만 사용하고 있습니다. 이것은 생성자가 Save 만 생성하기 위해 한 번 호출된다는 것을 의미합니까? 또는 SaveFile은 모두 상관없이 함께 구성됩니까?

답변

11

enum 클래스가 초기화 될 때 생성자가 호출됩니다. 각 멤버는 실제로 참조되고 사용되는 멤버에 관계없이 멤버 선언 순서대로 호출됩니다.

+0

'ClassLoader'가 클래스를로드 할 때 열거 형 생성자가 호출되는 것을 의미합니까? 저장 및 파일과 같은 액세스 멤버가 생성자를 호출합니까? 인수 생성자가 없으면 어떻게됩니까? –

+0

@MuhammadBabar 클래스를 초기화하지 않고로드 할 수 있습니다. 따라서 클래스가 초기화 될 때 각 멤버가 생성된다는 의미입니다. 그리고 내가 말했듯이, 회원이 언급되었는지는 중요하지 않습니다. 클래스가 초기화 될 때 생성됩니다. 두 번째 질문은 명확하지 않습니다. 멤버에 대해 제공된 인수가 없으면 인수가없는 생성자가 정의되어 있어야하며 그렇지 않으면 열거 형이 컴파일되지 않습니다. 이게 네가 말하는거야? – erickson

+0

그러나 enum에서는 새로운 SomeEnum()을 사용하지 않습니다. 즉 명시 적 초기화가 없습니다! 내 경우에 enum에는 하나의 변수, 즉 인스턴스 *와 arg가없는 전용 생성자 만 있습니다. 이 생성자는 언제 호출됩니까? –

3

static() {...} 메서드와 매우 유사하게 생성자는 Enum 클래스가 처음 초기화 될 때 호출됩니다. Enum의 모든 인스턴스는 any가 사용되기 전에 작성됩니다. Save.getShortCut()를 호출하기 전에이 샘플에서

public static void main(String args[]){ 
    System.out.println(Commands.Save.getShortCut()); 
} 

, 모두 SaveFile의 ctor에이 완료됩니다.

코드에서 선언 된대로 순차적으로 호출됩니다.

2

둘 다 다른 사람들이 말했듯이 클래스 초기화시 생성됩니다. 나는 이것이 정적 이니셜 라이저 이전에 행해지므로 정적 블록에서이 열거 형을 사용할 수 있다는 점을 지적하고자한다.