多个构造函数没什么奇怪的
这体现了 Java 的多态性

解决方案 »

  1.   

    我是做桌面程序的,是有两个如果开发EJB是没有的
      

  2.   

    第二个调用了第一个
    Java不像C++那样支持缺省参数
    比如C++里
    void find(String name, int age=4)
    你可以这样用
    find("F", 5);
    也可以这样用
    find("F");他就相当于find("F", 4);
    这里因为函数签名的原因,导致和重载有点小摩擦
    比如说,你重载了一个
    find(String name)
    那么,你调用find("F")的话,编译器怎么知道你是
    想要find("F", 4);
    还是你重载的那个find("F")?
    Java虽然不像C++那样灵活
    但是比C++简单,为了避免缺省参数和重载的冲突
    Java干脆不支持缺省参数
      

  3.   

    当你的类声明中没有包含任何构造器时候,编译器自动生成一个没有参数也不完成什么操作的默认构造器。
        如果已经声明了一个具有一个或多个参数的构造器,除非明确定义否则不会生成默认的没有参数的构造器。
        当对象被创建时,构造器调用是一个连接起来的调用序列,使对象的每个父类的构造器都会被调用。父类的构造器首先执行,以便子类可以访问父类的成员,而且可以保证在他们的构造器中定义的任何初始化工作都被执行。
        除非你用super保留字和所需要的参数表来显式调用另外一个构造器,否则调用的是超类的无参数构造器的隐式调用。将出现
        No-Argument Constructor not Found in Superclass
      

  4.   

    受益非浅,看来是borland开发人员的一些奇妙的构思能不能再深入些研究研究JB的设计思想或者模式 :)
      

  5.   

    Java 的多态性
    一般 只写一个比较全面完整的构造函数
    其它构造函数只要传递各自的参数就行了
      

  6.   

    唉呀,我觉得没有那么复杂的了当某种场合需要,或者无法带参数的实例化你的类的时候,就说明你的类需要提供一个不带参数的构造器,并在这个没有参数的构造器中做点儿什么。实例化一个类的对象,一般有这么两种情况:
    String test1 = new String(test2,"GB2312");
    或者
    String test2 ;
    //然后就使用
    test2 = ....;
    你说的第二种构造器的存在就是为了后面这样的情况。用这样的方式实例化一个类是因为你没有机会传递参数。或者说你当你需要使用默认的构造器。比如在做线程的时候也有这样的情况:事先不知道线程化的对象所属的类的构造器都是什么样的,因此只能用默认构造器--没有参数。你的例子中的第二个构造器调用了第一个构造器就是这个意思。