|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在1995年5月23日以“Java”的名称正式发布了。
本文供应一个项目中的毛病实例,供应对其察看和剖析,展现出Java言语实例化一个对象详细历程,最初总结出计划Java类的一个主要划定规矩。经由过程浏览本文,可使Java程序员了解Java对象的机关历程,从而计划出加倍强健的代码。本文合适Java初学者和必要进步的Java程序员浏览。
程序掷出了一个非常
作者已经在一个项目内里向项目构成员供应了一个笼统的对话框基类,利用者只需在子类中完成基类的一个笼统办法来画出显现数据的界面,便可使项目内的对话框具有不异的作风。详细的代码完成片段以下(为了简便起见,省略了其他有关的代码):
publicabstractclassBaseDlgextendsJDialog{
publicBaseDlg(Frameframe,Stringtitle){
super(frame,title,true);
this.getContentPane().setLayout(newBorderLayout());
this.getContentPane().add(createHeadPanel(),BorderLayout.NORTH);
this.getContentPane().add(createClientPanel(),BorderLayout.CENTER);
this.getContentPane().add(createButtonPanel(),BorderLayout.SOUTH);
}
privateJPanelcreateHeadPanel(){
...//创立对话框头部
}
//创立对话框客户地区,交给子类完成
protectedabstractJPanelcreateClientPanel();
privateJPanelcreateButtonPanel{
...//创立按钮地区
}
}
这个类在有的代码中事情得很好,但一个同事在利用时,程序却掷出了一个NullPointerException背例!经由对照,找出了事情一般和不一般的程序的渺小不同,代码片段分离以下:
1、一般事情的代码:
publicclassChildDlg1extendsBaseDlg{
JTextFieldjTextFieldName;
publicChildDlg1(){
super(null,"Title");
}
publicJPanelcreateClientPanel(){
jTextFieldName=newJTextField();
JPanelpanel=newJPanel(newFlowLayout());
panel.add(jTextFieldName);
...//别的代码
returnpanel;
}
...
}
ChildDlg1dlg=newChildDlg1(frame,"Title");//内部的挪用
2、事情不一般的代码:
publicclassChildDlg2extendsBaseDlg{
JTextFieldjTextFieldName=newJTextField();
publicChildDlg2(){
super(null,"Title");
}
publicJPanelcreateClientPanel(){
JPanelpanel=newJPanel(newFlowLayout());
panel.add(jTextFieldName);
...//别的代码
returnpanel;
}
...
}
ChildDlg2dlg=newChildDlg2();//内部的挪用
你看出来两段代码之间的不同了吗?对了,二者的不同仅仅在于类变量jTextFieldName的初始化工夫。经由跟踪,发明在实行panel.add(jTextFieldName)语句之时,jTextFieldName的确是空值。
我们晓得,Java同意在界说类变量的同时给变量赋初始值。体系运转过程当中必要创立一个对象的时分,起首会为对象分派内存空间,然后在“先于挪用任何办法之前”依据变量在类内的界说按次来初始化变量,接着再挪用类的机关办法。那末,在本例中,为何在变量界说时便初始化的代码反而会呈现空指针背例呢?
<p>
在1995年5月23日以“Java”的名称正式发布了。 |
|