Java 可以同时使用默认构造函数和参数构造函数吗?

Java 可以同时使用默认构造函数和参数构造函数吗?,java,arrays,eclipse,class,Java,Arrays,Eclipse,Class,我被指派使用默认构造函数和参数构造函数创建一个类,但问题是,这可能吗?我甚至不知道它是如何工作的。它们都应该给变量赋值当你在类中定义另一个构造函数时,你就不再得到“常用”的默认构造函数(公共的和没有参数的) 但是,您可以将其添加回: class MyClass{ MyClass(String param){} // custom constructor MyClass(){} // bring back the non-arg one } 当然,使用ne

我被指派使用默认构造函数和参数构造函数创建一个类,但问题是,这可能吗?我甚至不知道它是如何工作的。它们都应该给变量赋值

当你在类中定义另一个构造函数时,你就不再得到“常用”的默认构造函数(公共的和没有参数的)

但是,您可以将其添加回:

class MyClass{
   MyClass(String param){}  // custom constructor
   MyClass(){}              // bring back the non-arg one
}
当然,使用
new
创建对象实例时,必须选择调用哪一个(不能同时调用这两个):


构造函数可以相互调用(使用
this(parameters)
)或共享方法,如果它们中有您希望保留在一个位置的公共功能。

借用@bohemian的回答

public class Person
    ...
    public Person() { 
        this("unknown", 0); // you can call another constructor 
    }

    public Person(String nm, int ag) {
        name = nm;  
        age = ag;
    }
    ...
}

在本例中,如果调用了无参数构造函数,则
unknown
0
将传递给另一个构造函数

根据定义,实际上在Java中不能这样做。JLS§8.8.9说,“如果一个类不包含构造函数声明,那么默认构造函数将被隐式声明。”因此,只要添加任何构造函数声明,即使是无参数构造函数,也不会得到默认构造函数。

看看为什么您认为这是不可能的?
new
表达式的形式决定了要运行的构造函数。@ScaryWombat该链接不讨论默认构造函数。该类中没有默认构造函数。是的,我应该说
no args
构造函数
public class Person
    ...
    public Person() { 
        this("unknown", 0); // you can call another constructor 
    }

    public Person(String nm, int ag) {
        name = nm;  
        age = ag;
    }
    ...
}