这是面试中提出的问题.如果一个类在java中有多个构造函数,那么我们可以从另一个构造函数中调用吗?何时?我怎么称为语法?
Sea*_*ean 40
你可以,我知道的语法是
this(< argument list >);
Run Code Online (Sandbox Code Playgroud)
你也可以通过调用超类的构造函数
super(< argument list >);
Run Code Online (Sandbox Code Playgroud)
这两个调用只能作为构造函数中的第一个语句来完成(所以你只能调用另一个构造函数,并且在完成任何其他操作之前).
Pet*_*ang 11
是的,你可以这样做.
看一下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);
}
Run Code Online (Sandbox Code Playgroud)
第二个构造函数使用default capacity十个调用第一个构造函数.
Yis*_*hai 10
没有一个答案是完整的,所以我添加这个答案来填补空白.
您可以在同一个类中调用另一个构造函数,或者调用超类,具有以下限制:
this.因此,如果它引用任何实例方法,或者非静态方法调用的结果作为参数,则无法传递内部类(甚至是匿名的类).语法(如其他人所述)是:
MyClass() {
someInitialization();
}
MyClass(String s) {
this();
doSomethingWithS(s);
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,这被称为伸缩/伸缩构造模式.
它在JLS 8.8.7.1 Explicit Constructor Invokations中讨论过
- 替代构造函数调用以关键字
this开头(可能以显式类型参数开头).它们用于调用同一类的备用构造函数.- 超类构造函数调用以关键字
super(可能以显式类型参数开头)或主表达式开头.它们用于调用直接超类的构造函数.
this(other, args);
Run Code Online (Sandbox Code Playgroud)
例:
public class FileDb {
/**
*
*/
public FileDb() {
this(null);
}
public FileDb(String filename) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29986 次 |
| 最近记录: |