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; 
    } 
} 

だから、私は実際には変化にコンストラクタに渡さなっている「ラベル」をしたいです。だから私はコンストラクタからの参照を設定する必要がありますが、私はJavaでそれを行う方法がわかりません。すべての助けを前もってありがとう!

答えて

3

Javaでは値渡しが使用されます。しかし、オブジェクトの場合、渡される値は実際のオブジェクトへの参照です。これは、コンストラクタに渡されるラベルのテキストが変更されることを意味します。長い話を簡単に言えば、あなたのコードはすでにあなたが望むことをします。

2

Javaは常にの値渡しです。それは決して参照渡すことはありません。 例文hereで上記の説明を説明する適切な説明を参照してください。

はあなたの例では、

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

は、実際に、値(JLabelののすなわち、インスタンス)が、それがクラスClickListenerのメンバ変数(すなわち参照)に譲渡されたコンストラクタメソッドに渡されます。そのため、変数ClickListener.labelは渡されるオブジェクトを参照します。したがって、ClickListener.label参照変数を通じて行われた変更は、オブジェクトの新しいインスタンスが割り当てられるまで元のオブジェクトに反映されます。

関連する問題