通过实例学习Java对象的构造过程

http://tech.ddvip.com   2006年11月20日    社区交流

本文详细介绍通过实例学习Java对象的构造过程

  本文提供一个项目中的错误实例,提供对其观察和分析,揭示出Java语言实例化一个对象具体过程,最后总结出设计Java类的一个重要规则。通过阅读本文,可以使Java程序员理解Java对象的构造过程,从而设计出更加健壮的代码。本文适合Java初学者和需要提高的Java程序员阅读。

  程序掷出了一个异常

  作者曾经在一个项目里面向项目组成员提供了一个抽象的对话框基类,使用者只需在子类中实现基类的一个抽象方法来画出显示数据的界面,就可使项目内的对话框具有相同的风格。具体的代码实现片断如下(为了简洁起见,省略了其他无关的代码):

public abstract class BaseDlg extends JDialog {
public BaseDlg(Frame frame, String title) {
super(frame, title, true);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(createHeadPanel(), BorderLayout.NORTH);
this.getContentPane().add(createClientPanel(), BorderLayout.CENTER);
this.getContentPane().add(createButtonPanel(), BorderLayout.SOUTH);
}
private JPanel createHeadPanel() {
... // 创建对话框头部
}
// 创建对话框客户区域,交给子类实现
protected abstract JPanel createClientPanel();
private JPanel createButtonPanel {
... // 创建按钮区域
}
}

  这个类在有的代码中工作得很好,但一个同事在使用时,程序却掷出了一个NullPointerException违例!经过比较,找出了工作正常和不正常的程序的细微差别,代码片断分别如下:

  一、正常工作的代码:

public class ChildDlg1 extends BaseDlg {
 JTextField jTextFieldName;
 public ChildDlg1() {
  super(null, "Title");
 }
 public JPanel createClientPanel() {
  jTextFieldName = new JTextField();
  JPanel panel = new JPanel(new FlowLayout());
  panel.add(jTextFieldName);
  ... // 其它代码
  return panel;
 }
 ...
}
ChildDlg1 dlg = new ChildDlg1(frame, "Title"); // 外部的调用

  二、工作不正常的代码:

责编:豆豆技术应用

正在加载评论...