흥미로운 자바 퍼즐 - 인스턴스 이니셜라이저

Java의 인스턴스 초기화 프로그램 테스트



문제



아래 Java 코드의 출력이 무엇인지 추측할 수 있습니까?

암호



public class InstanceInitializerTest 
{

    public static void main(String[] args) 
    {
        {
            System.out.println("Feathers");
        }
    }

    {
        System.out.println("Snowy");
    }
}

옵션



가능한 출력 목록은 다음과 같습니다.

1. Snowy
2. Snowy
   Feathers
3. Feathers
4. Feathers
   Snowy

해결책



정답은

(3) Feathers

설명



인스턴스 이니셜라이저는 한 쌍의 중괄호({}) 사이에 정의된 코드 블록입니다. 메서드 내부에 있더라도 실제로 중요하지 않으며 실제로 계산됩니다.

위의 프로그램에서 프로그램을 실행하면 main() 메서드가 실행되고 그 안에 인스턴스 이니셜라이저가 있고 실행됩니다. main() 메서드 내에서 실행 가능한 유일한 문장이었기 때문에 프로그램 실행은 거기서 끝났다.
Snowy를 출력하는 다른 인스턴스 초기화 프로그램이 실행되지 않은 이유가 궁금할 것입니다. 보시다시피 두 번째 인스턴스 이니셜라이저는 메서드에 바인딩되지 않고 대신 클래스에 바인딩되었습니다. 클래스를 시작하지 않았기 때문에 클래스 수준의 인스턴스 이니셜라이저가 호출되지 않았습니다.

두뇌를 위한 일


main() 메서드 내부에서 클래스를 인스턴스화하고 출력의 변경 사항을 확인하십시오.
(2) Snowy , Feathers 메서드 내부의 인스턴스 이니셜라이저 이전 또는 이후에 클래스를 인스턴스화하는 위치에 따라 출력을 (4) Feathers, Snowy 또는 main()로 얻을 수 있습니다.

Remember, the order of the initializers matter a lot :)

좋은 웹페이지 즐겨찾기