programing

Java에서의 스태틱블록

copyandpastes 2022. 8. 16. 21:55
반응형

Java에서의 스태틱블록

며칠 전에 코드를 보다가 우연히 발견했어요

static {
    ...
}

C++에서 와서 그게 왜 거기 있는지 몰랐어요.코드가 정상적으로 컴파일 되어 있기 때문에 에러가 아닙니다.이 정적 코드 블록은 무엇입니까?

정적 이니셜라이저예요클래스가 로드될 때(정확히 말하면 초기화되었지만) 실행됩니다.

"클래스 컨스트럭터"라고 생각할 수 있습니다.

인스턴스 이니셜라이저도 있습니다.인스턴스 이니셜라이저는 똑같습니다.단, 이 인스턴스 이니셜라이저에는static키워드를 지정합니다.오브젝트의 새 인스턴스가 생성될 때 생성자의 코드와 더불어 실행됩니다.

스태틱 이니셜라이저입니다.클래스가 로드되어 정적 변수의 초기화를 배치하기에 적합한 위치에 있을 때 실행됩니다.

http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html 에서

클래스에는 임의의 수의 스태틱 초기화 블록을 포함할 수 있으며, 이러한 블록은 클래스 본문의 어디에나 표시할 수 있습니다.런타임 시스템은 정적 초기화 블록이 소스 코드에 표시되는 순서대로 호출되도록 보장합니다.

정적 룩업 맵이 있는 클래스가 있는 경우 다음과 같이 표시될 수 있습니다.

class MyClass {
    static Map<Double, String> labels;
    static {
        labels = new HashMap<Double, String>();
        labels.put(5.5, "five and a half");
        labels.put(7.1, "seven point 1");
    }
    //...
}

위의 정적 필드는 다음 방법으로 초기화할 수 없기 때문에 유용합니다.labels = ...어떻게 해서든 풋메서드를 불러야 합니다.

클래스 로더에 의해 클래스가 로드될 때 실행되는 코드 블록입니다.이는 클래스의 스태틱멤버를 초기화하기 위한 것입니다.

스태틱하지 않은 이니셜라이저를 쓸 수도 있습니다.이것은, 한층 더 기묘하게 보입니다.

public class Foo {
    {
        // This code will be executed before every constructor
        // but after the call to super()
    }

    Foo() {

    }
}

스태틱 블록은 메인 기능 없이 프로그램을 실행할 수 있음을 보여주기 위해 사용할 수 있습니다.

//static block
//static block is used to initlize static data member of the clas at the time of clas loading
//static block is exeuted before the main
class B
{
    static
    {
        System.out.println("Welcome to Java"); 
        System.exit(0); 
    }
}

스태틱 블록은 프로그램의 라이프 사이클에서 한 번 실행되며, 스태틱 블록의 또 다른 특성은 메인 방식보다 먼저 실행된다는 것이다.

정적 블록은 코드 초기화에 사용되며 JVM이 클래스를 로드할 때 실행됩니다.자세한 내용은 다음 링크를 참조하십시오.http://www.jusfortechies.com/java/core-java/static-blocks.php

네, 정적 블록은 코드를 초기화하기 위해 사용되며 실행을 위해 JVM이 시작될 때 로딩됩니다.

static block은 이전 버전의 Java에서 사용되지만 최신 버전에서는 작동하지 않습니다.

언급URL : https://stackoverflow.com/questions/2943556/static-block-in-java

반응형