2017-11-11 10 views
0
public class Tmp { 
    public static void main(String[] s) { 
     //new Tmp(); //comment 1 
    } 
    A a = new A(1); //comment 2 
} 

class A { 
    A(int i) { 
     System.out.println("value in A: " + i); 
    } 
} 

a주석 2 행을 실행 한 후에 생성 된 것으로 가정합니다.이 실행되었습니다. 그러나 아무것도 인쇄되지 않았다. 주석 1으로 줄을 활성화 한 후에 만 ​​"값이 A : 1"이 인쇄됩니다. 그렇다면 객체가 실제로 만들어 질 때 혼란 스럽습니다. 대조적으로, static A a = new A(1);주석 1이 비활성화 된 줄에도 "value in A : 1"을 인쇄합니다.A a = new A() 뒤에 인스턴스가 실제로 생성됩니까?

누구나이 메 커니즘에 대해 설명 할 수 있습니까? 감사.

답변

5

A a은 둘러싸는 클래스의 필드입니다.

(정적이 아닌) 필드는 해당 클래스의 객체를 인스턴스화 할 때 초기화됩니다. 따라서 a 필드는 new Tmp()이 발생하는 경우에만 이 "채워짐"입니다.

그게 전부입니다.