2013-08-20 2 views
-3

클래스 A에 클래스 B 참조가 있고 클래스 B에 클래스 A 참조가 있으면 Java에서 사용할 수 있습니까? 예인 경우, 클래스 A를 클래스 B로 실행하면 B가 인스턴스화되지 않습니다. 그렇다면 컴파일러가 클래스 B의 참조를 어떻게 실행합니까?자바의 순환 참조

TIA

+2

수업에 참조가 있다는 의미입니까? 클래스 A의 객체가 클래스 B의 객체에 대한 참조를 가지고 있다는 것을 의미합니까? – chrylis

+3

시도해 보셨습니까? 아마도 여기에 질문하는 것보다 적게 걸릴 것입니다. –

+1

코드를 설명하는 대신 작성하고 테스트하고 게시 방법을 이해하지 못하면 게시하십시오. –

답변

1

이것은 완벽합니다.

객체 A는 객체 B를 참조 할 수 있고, 객체 B는 그래프 참조 동안 많은 노드, 당신은 실제로 노드가 전체 그래프를 참조합니다 자주 코드의 그래프에서 볼 개체 A.을 참조 할 수 있습니다.

3

클래스 A에 클래스 B 참조가 있고 클래스 B에 클래스 A 참조가있는 경우 Java에서 사용할 수 있습니까?

예.

클래스 A를 시간 클래스로 실행하면 B가 인스턴스화되지 않습니다. 그렇다면 컴파일러가 클래스 B의 참조를 어떻게 실행합니까?

주기적으로 하나의 개체를 만든 다음 다른 개체를 만든 다음주기를 닫아야 순환 참조를 만들어야합니다. 예 : 이 같은.

A a = new A(); 
B b = new B(a); 
a.setB(b); 

는 (이 너무 사이클을 형성하는 다른 방법이 있습니다. A 클래스가 setB(A) 방법으로 정의되어 있다고 가정합니다, 그러나 이것은 간단합니다.)


그러나 참고하여 용어는 모두 완전히 잘못되었습니다.

  • 당신은 클래스를 "실행"하지 않습니다. 인스턴스화 또는 클래스의 인스턴스를 만듭니다.
  • 컴파일러 (예 javac 위해) 그냥 코드를 컴파일 ... 아무것도 "실행"하지 않습니다.
  • (즉, 의 실행) 인 Java 코드는 Java 가상 머신입니다. 예 : java 명령을 사용할 때.

(당신이 배우고 다른 IT 전문가와 통신하려는 경우 올바른 자바 용어를 사용하는 것이 중요합니다. 그것은 오해와 많은 혼란을 방지!)

+0

A의 생성자에서'this B'를 실제로 누출시킬 수 있습니다 :'new B (this)'. 실제로 이것은 (잘못 작성된) GUI 코드에서 많이 발생합니다. –

+0

@MarkoTopolnik - 그건 사실입니다 (내가 무슨 뜻인지 정확히 이해한다면 ...). 그러나 나는 그것을 간결하게하려고 노력하고 있습니다. –

+0

그것은 또한 의료 과실이므로 같은 시간에 깨끗하게 유지할 수 있습니다 :) –

0

예는에 허용 컴파일러가 메소드 이름과 서명 : 매개 변수 유형으로 다른 클래스에 대한 호출을 텍스트로 다시 저장하는만큼.

심지어 공포 다음 본

interface A { 
    final A = new B(); 
} 

class B implements A { 
} 

자바가 느슨하게 결합이다; 해당 런타임 예외가 발생했습니다. 같은 도서관 항아리의 다른 버전에 대해 컴파일 및 깨진 API와 항아리로 실행됩니다.