持有对象的引用 -Java学习笔记(33)
2007-07-30 00:10
861 查看
我们很多时候会遇到一个类的成员需要用到另外的类的一些成员,这时候会有很多解决方法,例如传参或是声明内部类。但是在某些场合下他们都有弊端存在。传参不利于数据成员的管理,并且操作烦琐。内部类很好用,但是在类对象很多并且分布在很多类中时就不适用了。内部类适用于在只有一个类用到它,希望这个类把它封装起来的情况下。所以我们通常在事件响应中使用匿名内部类,因为事件响应过程的复用度不高,通常只响应一个事件而已。
经常使用的做法是索性把整个对象的引用作为另一个类的数据成员,所有访问对象成员的动作都可以通过这个对象的引用来完成。这样在逻辑上非常清楚,而且代码会更加方便,易读。
一个简单的例子(这个例子似乎用内部类会更合适)
//: HoldRef.java
import java.awt.*;
import java.awt.event.*;
/** *//**
* Holding Reference Test.
* Input two numbers and click the button to compute.
* @author nyzhl
*/
public class HoldRef ...{
public static void main(String[] args) ...{
new MyFrame();
}
}
class MyFrame extends Frame ...{
TextField tfNum1,tfNum2,tfRslt;
Label lblPlus,lblEqual;
Button btnCompute;
MyFrame() ...{
super("加法计算");
tfNum1 = new TextField(5);
tfNum2 = new TextField(5);
tfRslt = new TextField(7);
lblPlus = new Label("+");
lblEqual = new Label("=");
btnCompute = new Button("Compute");
//Construct a new object of class MyListener which holding the current object reference.
btnCompute.addActionListener(new MyListener(this));
setLayout(new FlowLayout());
add(tfNum1);
add(lblPlus);
add(tfNum2);
add(lblEqual);
add(tfRslt);
add(btnCompute);
pack();
setVisible(true);
}
}
/** *//**
* Class who holds a reference of Class MyFrame.
*/
class MyListener implements ActionListener ...{
MyFrame mf;
MyListener(MyFrame mf) ...{
this.mf = mf;
}
public void actionPerformed(ActionEvent e) ...{
int num1 = Integer.parseInt(mf.tfNum1.getText());
int num2 = Integer.parseInt(mf.tfNum2.getText());
int rslt = num1 + num2;
mf.tfRslt.setText(rslt+"");
}
}
///:~
经常使用的做法是索性把整个对象的引用作为另一个类的数据成员,所有访问对象成员的动作都可以通过这个对象的引用来完成。这样在逻辑上非常清楚,而且代码会更加方便,易读。
一个简单的例子(这个例子似乎用内部类会更合适)
//: HoldRef.java
import java.awt.*;
import java.awt.event.*;
/** *//**
* Holding Reference Test.
* Input two numbers and click the button to compute.
* @author nyzhl
*/
public class HoldRef ...{
public static void main(String[] args) ...{
new MyFrame();
}
}
class MyFrame extends Frame ...{
TextField tfNum1,tfNum2,tfRslt;
Label lblPlus,lblEqual;
Button btnCompute;
MyFrame() ...{
super("加法计算");
tfNum1 = new TextField(5);
tfNum2 = new TextField(5);
tfRslt = new TextField(7);
lblPlus = new Label("+");
lblEqual = new Label("=");
btnCompute = new Button("Compute");
//Construct a new object of class MyListener which holding the current object reference.
btnCompute.addActionListener(new MyListener(this));
setLayout(new FlowLayout());
add(tfNum1);
add(lblPlus);
add(tfNum2);
add(lblEqual);
add(tfRslt);
add(btnCompute);
pack();
setVisible(true);
}
}
/** *//**
* Class who holds a reference of Class MyFrame.
*/
class MyListener implements ActionListener ...{
MyFrame mf;
MyListener(MyFrame mf) ...{
this.mf = mf;
}
public void actionPerformed(ActionEvent e) ...{
int num1 = Integer.parseInt(mf.tfNum1.getText());
int num2 = Integer.parseInt(mf.tfNum2.getText());
int rslt = num1 + num2;
mf.tfRslt.setText(rslt+"");
}
}
///:~
相关文章推荐
- JAVA编程思想学习笔记十一:持有对象
- Java学习笔记---6.面向对象编程01-类对象的构建及对象的引用传递
- 【Java学习笔记】父类引用指向子类对象时方法的调用
- 【Java学习笔记】父类引用指向子类对象之属性
- Java学习笔记之对象和对象引用
- JAVA学习笔记3--类,对象,变量,方法,构造方法,this,引用类型
- java学习个人笔记---java内存管理之Java对象的引用方式
- java学习笔记——java中对象的创建,初始化,引用的解析
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象
- [Java学习笔记] 对象的比较(引用比较、值比较) ^_^个人的理解,请多多关照^_^
- Java学习笔记一:基本语法:类和对象的介绍、数组、引用类型
- Java学习笔记----你可能不知道那些知识,对象复制与引用
- java学习笔记1:对象的"引用"
- java学习笔记2:对象的"引用"之二
- java学习笔记:引用与对象(1)
- [学习笔记][Java编程思想]第11章:持有对象
- Java学习笔记(5):2.面向对象之对象的this引用
- Thinking in java学习笔记之持有对象总结
- Java 持有对象学习笔记
- Java学习笔记之对象传值和引用总结