static 초기화 블록


지금까지 “static 초기화 블록”이 static 필드의 값을 설정하는데 한 줄로는 불가능할 때 사용된다고 알고 있었습니다.

그런데 왜 굳이 그 작업을 위해서 특별한 블록이 필요한지 모르겠습니다. 예를 들어 필드를 static으로 정의했습니다(값을 할당하지는 않고요). 그리고 위의 static 필드에 값을 생성하고 할당하는 여러 줄의 코드를 작성합니다.

왜 그런 코드들이 static {…}과 같은 특별한 블록 안에 있어야 하는것이죠?

  • 2016년 07월 10일에 작성됨

조회수 94


1 답변


좋아요
0
싫어요
채택취소하기

non-static 블록입니다:

{
    // Do Something...
}

이 블록은 클래스의 인스턴스가 생성될 때마다 매번 호출될 것입니다. static block은 해당 클래스 타입의 오브젝트를 몇 개를 생성하느냐와 상관없이 클래스 자체가 초기화될 때 한번 호출될 것입니다.

예시:

public class Test {

    static{
        System.out.println("Static");
    }

    {
        System.out.println("Non-static block");
    }

    public static void main(String[] args) {
        Test t = new Test();
        Test t2 = new Test();
    }
}

다음과 같이 출력됩니다:

Static
Non-static block
Non-static block
  • 2016년 07월 11일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close