2017-05-10 4 views
1
// filename: Test2.java 
class Test1 { 
    Test1(int x) { 
     System.out.println("Constructor called " + x); 
    } 
} 

// This class contains an instance of Test1 
class Test2 {  
    Test1 t1 = new Test1(10); 

    Test2(int i) { t1 = new Test1(i); } 

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

Output: 
Constructor called 10 
Constructor called 5 

누구든지이 프로그램의 출력을 설명 할 수 있습니까? "생성자 10"이 인쇄되는 방법을 알 수 없습니다. 미리 감사드립니다.프로그램 작업 흐름을 이해할 수 없습니다.

+0

나는 이미 프로그램을 디버깅했지만 어떤 개념이 없는지 잘 모르겠다. Test2의 생성자 안에서 t1을 치는 것처럼 t1이 Test1의 객체 참조에 할당 된 줄로 이동한다. (.t1은 그냥 참조 변수 왜 Test1의 생성자가 호출되고있다. 제발 무언가 소리가 나면 실례합니다. – user4291320

답변

4
  • 메인은 Test2의 생성자를 호출합니다.
  • 해당 생성자의 본문이 실행되기 전에 해당 클래스의 모든 인스턴스 변수가 초기화됩니다.
  • 이것은 Test1의 생성자를 인수 10으로 실행하고 "Constructor called 10"을 인쇄하는 Test1 t1 = new Test1(10);을 포함합니다.
  • 그런 다음 t1 = new Test1(i);을 포함하는 의 본문이 실행되고, i (값이 5) 인 생성자 Test1을 실행하고 "5라는 생성자"를 인쇄합니다. 당신의 Test2를 클래스에서
+0

아! 있어요. 실행하기 전에 생성자, 첫 번째 인스턴스 변수가 초기화됩니다. 많이 감사합니다 :) – user4291320

0

당신이 Test1 파일의 생성자를 호출하고 그것의 생성자 내부

Test1 t1 = new Test1(10); 

(10)의 값을 전달하여 Test1 파일의 인스턴스를 생성 한에 전달 된 값을 인쇄하는 인쇄 문이다 건설자.

Test1(int x) { 
    System.out.println("Constructor called " + x); 
} 

출력물의 출처입니다.