2013-03-11 3 views
-1

클래스 유형 구성원을 필드로 가지는 클래스 B을 가정 해 보겠습니다.Java 필드 초기화

이제 기본 생성자가 합성되지 않도록 B에 대한 생성자를 작성했습니다.

그러나 B's 생성자는 해당 필드를 명시 적으로 초기화하지 않습니다. Cobj_c의 C++ 기본 생성자에서

Class B 
{ 
    C obj_c; 

    B() 
    { } 
} 

는 비 초기화 된 회원의 기본 생성자 사촌이라고 할 것입니다 자바에 대한 개체 유형 members.What에 대해 암시 적으로 호출 할 것이다 ??

생성자가 Java로 필드를 초기화하지 않으면 어떻게됩니까?

+1

'obj_c = new C();'라고하지 않으면 C의 생성자가 호출되지 않습니다. ** 초기화 할 때까지 'null'상태로 유지됩니다. –

+1

자바는이 경우 obj_c를 'null'로 초기화합니다. –

+1

변수 선언에있는 모든 유형 이름 뒤에'*'라고 상상해보십시오. C++과 비슷한 것을 얻을 수 있습니다. –

답변

7

초기화되지 않은 멤버 변수가 자동으로 obj_c 여기 떨어지면 어디 객체 참조에 대한 논리 값에 대한 false, 숫자 0null으로 초기화됩니다. null으로 초기화됩니다.

편집

그것은 null로 초기화 생성자 아니다; Java Language Specification에 따르면 초기화하지 않으면 클래스 변수와 인스턴스 변수가 초기화됩니다.

+0

오케이, 'obj_c'가 'null'로 설정되면 생성자와 관련이 있습니다. 생성자가 null로 설정했기 때문에 obj_c 'null'입니까? – tez

+0

나는 내 대답을 수정했다. – rgettman

1

C의 생성자가 암시 적으로 호출되지 않습니다. 필드 초기화 또는 생성자의 설정을 통해 명시 적으로 호출되어야합니다.