2016-08-27 5 views
0

그래서 특정 이벤트가 발생할 때 작업을 수행하는 클래스를 만들고 있습니다. 기본적으로 변수는 다른 값으로 변경됩니다. 필요한 것은 생성자 내부에서이 객체에 대한 참조를 저장하는 것입니다. 은 "의 actionPerformed"메소드가 호출 될 때마다Java의 다른 클래스 내부에서 객체에 대한 참조를 저장하고 있습니까?

import javax.swing.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

/** 
* Created by iJason on 8/26/2016. 
*/ 
class ClickListener implements ActionListener { 
    JLabel label; 

    public void actionPerformed(ActionEvent event) { 
     label.setText("I was clicked."); 
    } 

    public ClickListener(JLabel label) { 
     this.label = label; 
    } 
} 

그래서, 내가 생성자에 실제로 변화에 건네지고있는 "라벨"을 원하는 : 여기 모두에게 더 나은 그림을 제공하기 위해 함께 일하고 코드입니다 . 그래서 생성자에서 그것에 대한 참조를 설정해야하지만 자바에서 그렇게하는 방법을 잘 모르겠습니다. 모든 도움을 미리 감사드립니다!

답변

3

Java는 값을 통한 전달을 사용합니다. 그러나 객체의 경우 전달 된 값은 실제 객체에 대한 참조입니다. 즉, 생성자에게 전달되는 레이블의 텍스트가 변경된다는 의미입니다. 간단히 말하자면 코드가 이미 원하는대로 작동합니다.

2

자바는 항상 값으로 전달합니다.입니다. 그것은 결코 참고로 통과하지 않습니다. 위의 진술을 설명하는 적절한 설명을 예제 here과 함께 참조하십시오. 하여 예에서

,
public ClickListener(JLabel label) { 
    this.label = label; 
} 

실제 값 (의 JLabel의 즉 인스턴스)이 클래스에 ClickListener의 멤버 변수 (즉 참조)에 할당되는 생성자 메소드로 전달된다. 따라서 변수 ClickListener.label은 전달되는 객체를 참조합니다. 따라서 ClickListener.label 참조 변수를 통해 수행 된 수정 사항은 객체의 새 인스턴스가 할당 될 때까지 원본 객체 에 반영됩니다.

관련 문제