我跑进这个代码块,有这一条线,我不放弃明白其中的含义或它在做什么。
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);
}
}
我明白this.method()
或this.variable
的,但什么是this()
这是构造函数重载:
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);
}
}
}
你可以说这个代码是一个构造函数,而不是由缺少返回类型的方法。 这是非常类似调用super()
在构造函数的第一线,以初始化扩展类。 你应该调用this()
或任何其他重载this()
在构造函数的第一行,从而避免构造函数代码重复。
您还可以看看这篇文章: 构造在Java中超载-最佳实践
使用这个()作为这样的一个功能,本质上调用类的构造函数。 这使您可以在一个构造函数中的所有通用的初始化和对他人的专业。 因此,在这段代码例如,调用this(in.readInt())
被调用具有一个int参数的构造函数有向图。
此代码段是一个构造函数。
这调用this
调用同一个类的另一个构造
public App(int input) {
}
public App(String input) {
this(Integer.parseInt(input));
}
在上面的例子中,我们有一个构造函数的int
和一个采用一个String
。 这需要一个构造函数String
转换String
到int
,然后委托给int
构造。
需要注意的是另一个构造函数或超类构造函数(调用super()
必须在构造函数的第一行。
也许看看这对构造函数重载的更详细的解释。
这几乎是相同的
public class Test {
public Test(int i) { /*construct*/ }
public Test(int i, String s){ this(i); /*construct*/ }
}
调用this
实质上调用类的构造函数。 例如,如果你扩展的东西,不是随add(JComponent)
,你可以这样做: this.add(JComponent).
类有向图的其它构造与int参数。
Digraph(int param) { /* */ }
构造函数重载:
例如:
public class Test{
Test(){
this(10); // calling constructor with one parameter
System.out.println("This is Default Constructor");
}
Test(int number1){
this(10,20); // calling constructor with two parameter
System.out.println("This is Parametrized Constructor with one argument "+number1);
}
Test(int number1,int number2){
System.out.println("This is Parametrized Constructor with two argument"+number1+" , "+number2);
}
public static void main(String args[]){
Test t = new Test();
// first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called
}
}
this();
是它是用来调用另一个构造中的一类,例如构造: -
class A{
public A(int,int)
{ this(1.3,2.7);-->this will call default constructor
//code
}
public A()
{
//code
}
public A(float,float)
{ this();-->this will call default type constructor
//code
}
}
注:我没有使用this()
的默认构造函数的构造,因为它会导致死锁状态。
希望对你有帮助:)