例如有个类
Class A
{
public A()
{
}
public A(Ojbect value)
{
initValue();
}
public void initValue(Ojbect value)
{
}
}
但是用的时候,我看一般都倾向与
这样用
即先构造,然后再初始化
A a = new A()
a.initValue(new Object());而不是A a= new A(Object value);为何一般采取第一种选择呢?
Class A
{
public A()
{
}
public A(Ojbect value)
{
initValue();
}
public void initValue(Ojbect value)
{
}
}
但是用的时候,我看一般都倾向与
这样用
即先构造,然后再初始化
A a = new A()
a.initValue(new Object());而不是A a= new A(Object value);为何一般采取第一种选择呢?
楼主【jayli426】截止到2008-07-28 14:25:17的历史汇总数据(不包括此帖):
发帖的总数量:20 发帖的总分数:410 每贴平均分数:20
回帖的总数量:12 得分贴总数量:1 回帖的得分率:8%
结贴的总数量:11 结贴的总分数:230
无满意结贴数:0 无满意结贴分:0
未结的帖子数:9 未结的总分数:180
结贴的百分比:55.00 % 结分的百分比:56.10 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
因为你显式的声明了带参的构造函数, public A(Ojbect value) ,如果你没加上public A()不带参的
构造函数会导致执行A a = new A() 时会出错,所以当然要加显式的写上这个
不带参的构造函数了.
实际应用中可以更加灵活。
比如我们做的项目中,需要做权限控制,那么没有某个组件的权限就不初始化。
(为什么不控制在new呢,因为是反射机制加载的。)
因为C++需要程序员自己回首内存,当在构造函数中出问题的时候,对象没有构造,所以无法调用析构函数,这样很多分配的 内存,打开的文件等就无法处理了.所以可能在构造方法中尽量少做事情好.
但是java中由于垃圾自动回收,以及比较好的异常处理机制,可以避免这些问题,我感觉应该不存在这个说法吧.
个人推断,仅供拍砖
这是因为当构造器中有多态方法时的构造器调用方法与一般方法不同,为了避免这种调用方法的不安全性而定的。这与楼主的“不要让构造器做太多事”是否有关有待查证……