例如有个类
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);为何一般采取第一种选择呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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  %                  
    楼主加油
      

  2.   

    没有一般采取第一种选择这种说法吧,呵呵
    因为你显式的声明了带参的构造函数, public A(Ojbect value) ,如果你没加上public A()不带参的
    构造函数会导致执行A a = new A() 时会出错,所以当然要加显式的写上这个
    不带参的构造函数了.
      

  3.   

    “不要让构造函数做太多的事情 ”
    实际应用中可以更加灵活。
    比如我们做的项目中,需要做权限控制,那么没有某个组件的权限就不初始化。
    (为什么不控制在new呢,因为是反射机制加载的。)
      

  4.   

    我怀疑lz是不是看C ++的书看的,C++有的书里有这样的提法.
    因为C++需要程序员自己回首内存,当在构造函数中出问题的时候,对象没有构造,所以无法调用析构函数,这样很多分配的 内存,打开的文件等就无法处理了.所以可能在构造方法中尽量少做事情好.
    但是java中由于垃圾自动回收,以及比较好的异常处理机制,可以避免这些问题,我感觉应该不存在这个说法吧.
    个人推断,仅供拍砖
      

  5.   

    thinking in java第七章中讲构造器内部的多态方法行为时讲到过编写构造器的时候有一条有益原则:尽可能用简单的方法使对象进入正常状态,如果可以得话,避免调用其他方法。在构造器唯一能能够安全调用的那些方法是基类(父类)中的final方法。
    这是因为当构造器中有多态方法时的构造器调用方法与一般方法不同,为了避免这种调用方法的不安全性而定的。这与楼主的“不要让构造器做太多事”是否有关有待查证……