-4

나는 최근 자바 구문의 다음 비트를 건너 왔어요 : 분명히 이것은 "클래스가로드 될 때 실행"하는 "정적 초기화"(Static Block in Java 참조)로 알려져있다이니셜 라이저는 언제 사용합니까?

static { 
... 
} 

합니다. 정적 초기화 프로그램은 언제 사용해야합니까? 일반적인 방법으로 변수를 초기화하는 것과 비교하여 장점과 단점은 무엇입니까? 정적 초기화가 단순히 정적 필드에 값을 할당 넘어 로직, 예를 들어, 필요한 경우

의 의견과 링크 된 게시물에서 언급 한 바와 같이
+0

관련 항목 http://stackoverflow.com/questions/804589/use-of-initializers-vs-constructors-in-java?rq=1 – Kevin

+0

http://www.jusfortechies.com/java/core-java/static-blocks. 코드를 사용하여 정적 변수를 초기화하려면 ph – zod

+0

을 입력하십시오. 이것은 간단한 표현식에 할당되지 않은 변수를 초기화하는 일반적인 방법입니다. 이렇게해야 할 때 대안이별로 중요하지 않으므로 좋은 대안이 없습니다. 각 변수를 호출하는 정적 메서드를 만들 수 있지만 이것은 우아하지 않고 더 혼란 스러울 수 있습니다. –

답변

1

, 그것은 유용

초기화 블록을 사용하지 않는 대안이있다
public class MediocreExample { 

    static List<String> strings = new ArrayList<String>(); 

    static { 
     strings.add("first"); 
     strings.add("second"); 
    } 

}   

: 당신이 초기화 버전은 매우 명확하고 간결하다 볼 수 - -

public class MediocreExample { 

    static List<String> strings = createInitialList(); 

    private static List<String> createInitialList() { 
     List<String> a = new ArrayList<String>(); 
     a.add("first"); 
     a.add("second"); 
     return a; 
    } 

} 

비 초기화 대안을 사용하는 매력적인 이유 정말 없다하지만이 점을 설명하기 위해 그것을 포함하고있어이 : 돈 블라인드 디자인 결정을 내리지 않는다. 왜 당신이 선택한 옵션을 선택하는지 알 수 있습니다.

때로는 이와 같은 편리한 대안이 없습니다.

public class MediocreExample { 

    static { 
     System.out.println("MediocreExample static init."); 
    }  

} 

동등한 코드를 생성하는 다른 방법이있다하지만 그 깨끗한입니다 : 목표는 정적 초기화에 콘솔에 뭔가를 인쇄하는 경우.

그러나 가장 일반적인 방법으로 가장 명확하고 유지하기 쉬운 코드를 제공하십시오. 언어 란 생각을 표현하고, 명확하게 말 (유형)하는 방법입니다.