我遇到了这段代码,并且有一行我不会放弃了解其含义或内容。
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()
是什么?
答案 0 :(得分:53)
这是构造函数重载:
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()
),从而避免构造函数代码重复。
答案 1 :(得分:10)
使用this()作为这样的函数,本质上调用类的构造函数。这允许您在一个构造函数中进行所有通用初始化,并在其他构造函数中具有特化。因此,在这段代码中,对this(in.readInt())
的调用是调用具有一个int参数的Digraph构造函数。
答案 2 :(得分:9)
此代码段是构造函数。
对this
的调用会调用同一个类的另一个构造函数
public App(int input) {
}
public App(String input) {
this(Integer.parseInt(input));
}
在上面的例子中,我们有一个带int
的构造函数和带String
的构造函数。采用String
的构造函数将String
转换为int
,然后委托给int
构造函数。
请注意,对另一个构造函数或超类构造函数(super()
)的调用必须是构造函数中的第一行。
也许请查看this以获取有关构造函数重载的更详细说明。
答案 3 :(得分:4)
几乎相同
public class Test {
public Test(int i) { /*construct*/ }
public Test(int i, String s){ this(i); /*construct*/ }
}
答案 4 :(得分:3)
具有int参数的Digraph类的其他构造函数。
Digraph(int param) { /* */ }
答案 5 :(得分:3)
调用this
本质上调用类Constructor。
例如,如果您要扩展某些内容,而不是add(JComponent)
,那么您可以执行以下操作:this.add(JComponent).
答案 6 :(得分:2)
构造函数重载:
例如:
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
}
}
答案 7 :(得分:2)
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()
构造函数,因为它会导致死锁状态。
希望这会对你有所帮助:)。