Sug*_*ara 43 java constructor this constructor-overloading
我遇到了这段代码,有一条我不放弃了解它的含义或它正在做什么.
public Digraph(In in) {
this(in.readInt());
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了什么this.method()
或this.variable
有,但什么是this()
?
Avi*_*Avi 54
这是构造函数重载:
public class Diagraph {
public Diagraph(int n) {
// Constructor code
}
public Digraph(In in) {
this(in.readInt()); // Calls the constructor above.
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过缺少返回类型来判断此代码是构造函数而不是方法.这非常类似于super()
在构造函数的第一行中调用以初始化扩展类.您应该在构造函数的第一行调用this()
(或任何其他重载this()
),从而避免构造函数代码重复.
您还可以看看这篇文章:Java中的构造函数重载 - 最佳实践
Sin*_*int 10
使用this()作为这样的函数,本质上调用类的构造函数.这允许您在一个构造函数中进行所有通用初始化,并在其他构造函数中具有特化.因此,在这段代码中,调用this(in.readInt())
是调用具有一个int参数的Digraph构造函数.
此代码段是构造函数.
此调用this
调用同一个类的另一个构造函数
public App(int input) {
}
public App(String input) {
this(Integer.parseInt(input));
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们有一个构造函数,它接受一个int
和一个String
.接受String
转换String
为an int
的int
构造函数然后委托给构造函数.
请注意,对另一个构造函数或超类构造函数(super()
)的调用必须是构造函数中的第一行.
也许看看这个有关构造函数重载的更详细解释.
归档时间: |
|
查看次数: |
36361 次 |
最近记录: |