请教大虾Java多重构造函数的问题

打码的老程
博客专家认证
2009-05-16 08:02:33
小弟写Java遇到一个比较麻烦的问题,想问问各位高手,就是如何创建多重的构造函数
写了一个够着函数用来初始化我类里面的各个成员变量,然后又写了些其他的构造函数,目的是用来处理用户输入时候缺少参数的情况。然后我用this去调用,但编译器提示说要把this放在构造函数的前面~请教大侠如何处理,我不想重写一堆代码呢~~~

public class Relation {

private BasicComponent header;
private BasicComponent[] body;
private int nSize;

public Relation( BasicComponent udt_header ) {
this( udt_header, 0 );
}

public Relation() {
BasicComponent udt_header = new BasicComponent();
this( udt_header, 0 );//编译器就是这个地方提示的错误~~~~有谁有好方法??
}

public Relation( BasicComponent udt_header, int n_nSize ) {
BasicComponent udt_tempHeader = new BasicComponent();
int nTempSize = 0;
if( udt_header != null &&
!udt_header.getName().isEmpty() &&
!udt_header.getElement(0).isEmpty() )
udt_tempHeader = udt_header;
if( n_nSize > 0 )
nTempSize = n_nSize;
header = udt_tempHeader;
if( nTempSize > 0 )
body = new BasicComponent[ nTempSize ];
nSize = nTempSize;
}

//***************************************************************************
后面省略~~~麻烦知道的大侠告诉下~~~~~感激不尽!!!!
...全文
187 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaisa316 2009-05-16
  • 打赏
  • 举报
回复
构造器最大用途之一就是初始化数据成员,而不要试图让它做更多的事情。
这样既分工明确,条理清晰又可以使代码之间的关联不高度联系,纠错时也容易。
不介意的话,我把你的构造器修改了一下。其余用途的实现你应该放到其余方法中。这只是我的建议。

public class Relation
{
public Relation()
{
this(null,0); //这里如果不想给第一个参数具体值的话,可以为null.
}
public Relation(BasicComponent udt_header )
{
this( udt_header, 0 ); //初始化第一个参数,第二个给个初值即可。
}
public Relation( BasicComponent udt_header, int n_nSize )
{
header = udt_header;
nSize = n_nSize;
}

private BasicComponent header;
private BasicComponent[] body;
private int nSize;
}

打码的老程 2009-05-16
  • 打赏
  • 举报
回复
5楼的大侠,说的很有道理啊~!我之前那样做事因为以前写的代码总出了NullPointerException所有不得已而那样写的~~~~~多谢多谢!!
默然说话 2009-05-16
  • 打赏
  • 举报
回复
NullPointerException就是空指针异常,意思就是说,对象引用为null,无法调用方法。解决方法就是获得一个对象实例,最简单的办法就是new一个对象。
默然说话 2009-05-16
  • 打赏
  • 举报
回复
这样写构造函数,太笨了。
为啥不这样写呢?
public Relation() {
this.header=new BasicComponent();
this.body=new BasicComponent[1];//这个1只是举个例子,你可以改成你想要的值
nSize=0;
//很奇怪,为啥都要去搞个临时变量,为啥不直接赋值,就象我前面写的那样?
}

public Relation( BasicComponent udt_header, int n_nSize ) {
this();//注意,这里先初始化
BasicComponent udt_tempHeader = new BasicComponent();
int nTempSize = 0;
if( udt_header != null &&
!udt_header.getName().isEmpty() &&
!udt_header.getElement(0).isEmpty() )
udt_tempHeader = udt_header;
if( n_nSize > 0 )
nTempSize = n_nSize;
header = udt_tempHeader;
if( nTempSize > 0 )
body = new BasicComponent[ nTempSize ];
nSize = nTempSize;

}

打码的老程 2009-05-16
  • 打赏
  • 举报
回复
必须放在第一行么???那么如果要避免赋值的是个null的话,是不是意味着我需要在最下面的那个构造函数里面把这个为空的情况给处理掉,而不能在那个报错的那一行的位置处理?
另外顺便问一下,各位在设计Java程序的时候,是如何处理值传递过程中的NullPointerException的???因为我的最后的调试中总会出现这个异常~~~
Dreamsea_2008 2009-05-16
  • 打赏
  • 举报
回复
顶二楼
Aishangwan 2009-05-16
  • 打赏
  • 举报
回复
this()必须放在方法主体中的第一行。
打码的老程 2009-05-16
  • 打赏
  • 举报
回复
call to this must be first statement in constructor 这个就是JAVA报错的东西~~~~~~~~~~~~~~~~~~~求救~~~~~~~
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧