在以下程序中我使用了这个(1)&这(2)使用这个(1)&的目的是什么?这个(2)我还想知道这是一个关键字还是方法?我是java编程语言的新手。
class Const
{
Const()
{
this(1);
System.out.println(1);
}
Const(int x)
{
System.out.println(2);
}
}
class const1 extends Const
{
int a;
const1()
{
this(8);
System.out.println(3);
}
const1(int x)
{
System.out.println(4);
}
public static void main(String s[])
{
new const1();
}
}
答案 0 :(得分:5)
这些是alternate constructor invocations。它们在同一个类中调用另一个构造函数。这允许多个构造函数共享相同的代码以实现常见行为。没有它,你有时会被迫重复自己。
例如:
Const()
{
this(1);
...
}
使用实际参数“1”调用此构造函数:
Const(int x) { ... }
您可以以类似的方式使用关键字super()
来调用超类构造函数。
来自Java语言规范,8.8.7.1, Explicit constructor invocations:
显式构造函数调用语句可以分为两种:
备用构造函数调用以关键字this开头(可能以显式类型参数开头)。它们用于调用同一类的替代构造函数。
超类构造函数调用以关键字super(可能以显式类型参数开头)或Primary表达式开头。它们用于调用直接超类的构造函数。
答案 1 :(得分:1)
this()
如果在构造函数中使用,实际上用于调用同一个类的另一个构造函数。如果你保持重载的构造函数,它会特别有用。
public class Rectangle {
private int x, y;
private int width, height;
public Rectangle() {
this(0, 0, 0, 0);
}
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
...
}
请记住, this()
或super()
必须是构造函数中的第一个语句(如果您使用它们)。因此,它们不能在构造函数中一起使用。
this
如果在方法体内使用,将引用调用该方法的当前实例。
答案 2 :(得分:0)
它类似于为方法创建重载,因此它们模拟具有“可选”参数,例如:
DoStuff(int x, int y)
{
//Stuff
}
DoStuff(int x)
{
DoStuff(x, x);
}
除非您在构造函数中执行此操作(如果它们未传递值,则只使用值1)。要回答问题this
,请调用对象的构造函数。