通过实例学习Java对象的构造历程[Java编程]
本文“通过实例学习Java对象的构造历程[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违例!经过对比,找出了工作正常和不正常的程序的渺小差别,代码片断辨别以下:
1、正常工作的代码:
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"); // 外部的调用
2、工作不正常的代码:
public class ChildDlg2 extends BaseDlg {
JTextField jTextFieldName = new JTextField();
public ChildDlg2() {
super(null, "Title");
}
public JPanel createClientPanel() {
JPanel panel = new JPanel(new FlowLayout());
panel.add(jTextFieldName);
... // 别的代码
return panel;
}
...
}
ChildDlg2 dlg = new ChildDlg2(); // 外部的调用
你看出来两段代码之间的差别了吗?对了,二者的差别仅仅在于类变量jTextFieldName的初始化时间.经过跟踪,发目前履行panel.add(jTextFieldName)语句之时,jTextFieldName确切是空值.
我们知道,Java答应在定义类变量的同时给变量赋初始值.系统运行历程中需求成立一个对象的时刻,首先会为对象分配内存空间,然后在“先于调用任何办法之前”按照变量在类内的定义次序来初始化变量,接着再调用类的构造办法.那么,在本例中,为什么在变量定义时便初始化的代码反而会呈现空指针违例呢?
以上是“通过实例学习Java对象的构造历程[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |