在java中从一个构造函数调用另一个构造函数

在java中从一个构造函数调用另一个构造函数,java,constructor,Java,Constructor,这是采访中提出的问题。 如果一个类在java中有多个构造函数,那么我们可以从另一个构造函数中调用一个构造函数吗?何时调用?我指的是语法,如何调用?示例: this(other, args); public class FileDb { /** * */ public FileDb() { this(null); } public FileDb(String filename) { // ... } } 你可以,我知道的语法是 this(

这是采访中提出的问题。 如果一个类在java中有多个构造函数,那么我们可以从另一个构造函数中调用一个构造函数吗?何时调用?我指的是语法,如何调用?

示例:

this(other, args);
public class FileDb {

  /**
   * 
   */
  public FileDb() {
    this(null);
  }

  public FileDb(String filename) {
    // ...
  }

}

你可以,我知道的语法是

this(< argument list >);
这个();
您还可以通过调用超级类的构造函数

super(< argument list >);
super();
这两个调用只能作为构造函数中的第一个语句来执行(因此,在执行任何其他操作之前,您只能调用另一个构造函数)。

是的,您可以这样做

请查看
ArrayList
实现,例如:

public ArrayList(int initialCapacity) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    this.elementData = new Object[initialCapacity];
}

/**
 * Constructs an empty list with an initial capacity of ten.
 */
public ArrayList() {
    this(10);
}
public数组列表(int initialCapacity){
超级();
如果(初始容量<0)
抛出新的IllegalArgumentException(“非法容量:”+
初始容量);
this.elementData=新对象[初始容量];
}
/**
*构造一个初始容量为10的空列表。
*/
公共数组列表(){
这(10);
}
第二个构造函数调用默认容量为10的第一个构造函数。

这在第二章讨论

  • 替代构造函数调用以关键字
    this
    开始(可能以显式类型参数开头)。它们用于调用同一类的备用构造函数
  • 超类构造函数调用以关键字
    super
    (可能以显式类型参数开头)或主表达式开始。它们用于调用直接超类的构造函数

没有一个答案是完整的,所以我加上这个来填补空白

您可以从同一类中的另一个构造函数调用一个构造函数,或调用超类,但有以下限制:

  • 它必须是调用构造函数中的第一行代码
  • 它不能显式或隐式引用此。因此,不能将内部类(即使是匿名类,如果它引用任何实例方法)或非静态方法调用的结果作为参数传递
  • 语法(如其他人所述)为:


    你能澄清这个问题吗?有多个构造函数以不同的方式创建对象,并且可以从其他类调用它们。他指的是从另一个构造函数调用构造函数。他问的是,当一个类有多个构造函数时,是否允许从另一个构造函数调用构造函数。这要么是误导,要么就是完全错误!其他的是什么?您只需使用
    this(构造函数需要的参数)
    super(构造函数需要的参数)调用另一个构造函数并且你不能做任何需要引用的事情。它也必须在构造函数的第一行,第一行,所以它将是第一个被实现的
    
    MyClass() {
       someInitialization();
    }
    
    MyClass(String s) { 
         this();
         doSomethingWithS(s);
    }