这个(1)&的目的是什么?这个(2)在以下程序中?

时间:2013-07-31 17:55:21

标签: java methods this

在以下程序中我使用了这个(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();
    }
}

3 个答案:

答案 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如果在方法体内使用,将引用调用该方法的当前实例。

阅读thissuper的Oracle教程。

答案 2 :(得分:0)

它类似于为方法创建重载,因此它们模拟具有“可选”参数,例如:

DoStuff(int x, int y)
{
    //Stuff
}

DoStuff(int x)
{
    DoStuff(x, x);
}

除非您在构造函数中执行此操作(如果它们未传递值,则只使用值1)。要回答问题this,请调用对象的构造函数。