当前位置:编程学习 > JAVA >>

什么叫做持有对方引用?

这个不是很理解,麻烦同志们授予一下知识。
还有这样做,好处是在哪里?
感谢大家 --------------------编程问答-------------------- http://bbs.csdn.net/topics/220073448不谢 --------------------编程问答-------------------- 就是设置一个属性而已,只不过是个对象,所以直接指向引用就可以了,不用再new一个。
在一个类中访问另外一个类的成员变量,可以利用持有对方的引用来访问

本程序实现一个简单的加法运算器带图形界面的。

程序如下:先是不持有对方引用

import java.awt.*;
import java.awt.event.*;
public class TestMath {
public static void main(String[] args) {
   MyFrame9 f = new MyFrame9();
   f.MyMath();
}
}

class MyFrame9 extends Frame {
TextField tf1,tf2,tf3;
public void MyMath() {
   tf1 = new TextField("10");
   tf2 = new TextField("10");
   tf3 = new TextField("20");
   Label label1 = new Label("+");
   Button b1 = new Button("=");
  b1.addActionListener(new MyMonitor(tf1,tf2,tf3));
   setLayout(new FlowLayout());
   add(tf1);
   add(label1);
   add(tf2);
   add(b1);
   add(tf3);
   pack();
   setVisible(true);
}
}

class MyMonitor implements ActionListener {
TextField tf1,tf2,tf3;
MyMonitor(TextField tf1,TextField tf2,TextField tf3) {
this.tf1 = tf1;
this.tf2 = tf2;
this.tf3 = tf3;
}
public void actionPerformed(ActionEvent e) {
   int n1 = Integer.parseInt(tf1.getText());
   int n2 = Integer.parseInt(tf1.getText());
   tf3.setText(""+(n1+n2));

}
}

再在源程序上修改为:持有对方引用

import java.awt.*;
import java.awt.event.*;
public class TestMath {
public static void main(String[] args) {
   MyFrame9 f = new MyFrame9();
   f.MyMath();
}
}

class MyFrame9 extends Frame {
TextField tf1,tf2,tf3;
public void MyMath() {
   tf1 = new TextField("10");
   tf2 = new TextField("10");
   tf3 = new TextField("20");
   Label label1 = new Label("+");
   Button b1 = new Button("=");
   b1.addActionListener(new MyMonitor(this));
   setLayout(new FlowLayout());
   add(tf1);
   add(label1);
   add(tf2);
   add(b1);
   add(tf3);
   pack();
   setVisible(true);
}
}

class MyMonitor implements ActionListener {
  MyFrame9 mf = null;
MyMonitor(MyFrame9 mf) {
   this.mf = mf;
}
public void actionPerformed(ActionEvent e) {
   int n1 = Integer.parseInt(mf.tf1.getText());
   int n2 = Integer.parseInt(mf.tf2.getText());
   mf.tf3.setText(""+(n1+n2));
}
}

PS:很明显程序一要传每一个成员变量,比较不方便,而程序二相当于在跟一个持有全部成员变量的大管家在打交道,自然可以也可以跟成员变量打交道,方面了程序。 --------------------编程问答--------------------
引用 2 楼 qq1145174853 的回复:
就是设置一个属性而已,只不过是个对象,所以直接指向引用就可以了,不用再new一个。
在一个类中访问另外一个类的成员变量,可以利用持有对方的引用来访问

本程序实现一个简单的加法运算器带图形界面的。

程序如下:先是不持有对方引用

import java.awt.*;
import java.awt.event.*;
public class TestMath {
public static void main(String[] args) {
   MyFrame9 f = new MyFrame9();
   f.MyMath();
}
}

class MyFrame9 extends Frame {
TextField tf1,tf2,tf3;
public void MyMath() {
   tf1 = new TextField("10");
   tf2 = new TextField("10");
   tf3 = new TextField("20");
   Label label1 = new Label("+");
   Button b1 = new Button("=");
  b1.addActionListener(new MyMonitor(tf1,tf2,tf3));
   setLayout(new FlowLayout());
   add(tf1);
   add(label1);
   add(tf2);
   add(b1);
   add(tf3);
   pack();
   setVisible(true);
}
}

class MyMonitor implements ActionListener {
TextField tf1,tf2,tf3;
MyMonitor(TextField tf1,TextField tf2,TextField tf3) {
this.tf1 = tf1;
this.tf2 = tf2;
this.tf3 = tf3;
}
public void actionPerformed(ActionEvent e) {
   int n1 = Integer.parseInt(tf1.getText());
   int n2 = Integer.parseInt(tf1.getText());
   tf3.setText(""+(n1+n2));

}
}

再在源程序上修改为:持有对方引用

import java.awt.*;
import java.awt.event.*;
public class TestMath {
public static void main(String[] args) {
   MyFrame9 f = new MyFrame9();
   f.MyMath();
}
}

class MyFrame9 extends Frame {
TextField tf1,tf2,tf3;
public void MyMath() {
   tf1 = new TextField("10");
   tf2 = new TextField("10");
   tf3 = new TextField("20");
   Label label1 = new Label("+");
   Button b1 = new Button("=");
   b1.addActionListener(new MyMonitor(this));
   setLayout(new FlowLayout());
   add(tf1);
   add(label1);
   add(tf2);
   add(b1);
   add(tf3);
   pack();
   setVisible(true);
}
}

class MyMonitor implements ActionListener {
  MyFrame9 mf = null;
MyMonitor(MyFrame9 mf) {
   this.mf = mf;
}
public void actionPerformed(ActionEvent e) {
   int n1 = Integer.parseInt(mf.tf1.getText());
   int n2 = Integer.parseInt(mf.tf2.getText());
   mf.tf3.setText(""+(n1+n2));
}
}

PS:很明显程序一要传每一个成员变量,比较不方便,而程序二相当于在跟一个持有全部成员变量的大管家在打交道,自然可以也可以跟成员变量打交道,方面了程序。
++ --------------------编程问答-------------------- class A{
    B b;//这儿就叫做持有对方的引用,他持有对B的引用(好处就是当A需要用到对象B的时候可以直接实例化b,然后使用,不需要再传值)
    fangfaA(){
         
    }
}

class B{
fangfaB(){}
}

--------------------编程问答-------------------- 就是Class A中有B对象的引用,,,Class B中也有A对象的引用。。 --------------------编程问答-------------------- 你可以这样理解,把对方引用想成一个总裁,通常员工在处理重大决策中必须得到总裁的许可,通常总裁不会和员工这种小角色打交道吧,如果你时刻有办法把总裁绑在你身边,你要处理一些重大决策的时候是不是可以直接向总裁汇报了。就是有了总裁(对方引用),员工(持有对方引用的类)的处理效率会大大提高。这也就是持有对方引用的好处。 --------------------编程问答-------------------- 看了2,4,6楼的我想你应该明白了,持有对方引用方便自己使用
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,