这是什么() ?它有多个参数吗?

时间:2011-03-03 18:46:59

标签: java this

我遇到了一个代码,其中java中的this()方法接受三个参数,两个是整数,第三个是布尔值。 这到底是什么意思呢 ?这个()方法还有其他变种吗? 赫拉是实际的代码。

 public SegmentConstructor(int seqNum_, int length_) {
        this(seqNum_, length_, false);
    }

谢谢..

6 个答案:

答案 0 :(得分:10)

这意味着当前类中有另一个具有该签名的构造函数。

public SegmentConstructor(int seqNum_, int length_) {
    this(seqNum_, length_, false); // calls the constructor below.
}

public SegmentConstructor(int seqNum_, int length_, boolean required_) {
    seqNum = seqNum_;
    length = length_;
    required = required_;
}

this方法只是一种从另一个构造函数中调用类的构造函数的方法,以帮助避免代码重复。它只能在构造函数的第一行调用 - 永远不能在任何其他方法中调用。

答案 1 :(得分:2)

this只是调用另一个构造函数来运行。因此,寻找具有该签名的其他构造函数。

答案 2 :(得分:1)

如前所述,这会调用另一个构造函数,主要是作为一种方便的方法。

琐碎的例子:

class A {
 private int value;

 public A(int val) {
  value = val;
 }

 public A() {
  this(0); //0 as default
 }
}

通常,当最具体的构造函数(参数最多的构造函数)不仅仅是赋值,而是包含更多不想重复/复制的逻辑等时,你会使用对this()的调用。

仅仅因为它适合这里:super()也可以有参数,即这会使用子类'构造函数中的参数调用超类'构造函数。

答案 3 :(得分:0)

这是构造函数调用。如果您的类使用不同数量的参数实现不同的构造函数,您可以链接构造函数,如下所示:

class A {
    public A(boolean arg) {
        ...
    }

    public A() {
        this(false); // invokes the constructor with the boolean argument
    }
}

有时创建一个使用不同参数的私有构造函数并使用其他/更少的参数提供公共和/或受保护的构造函数并将对象构造委托给该私有构造函数是有意义的。

重要的是要知道在调用此函数之前不能放置其他代码(...)。但是,在调用此(...)之后,您可以在任何其他构造函数中执行所有操作。

编辑:由于此(...)调用构造函数,因此只能从其他构造函数(属于同一个类)中调用它。

答案 4 :(得分:0)

类MyClass { private int var1; private int var2; private boolean flag;

public MyClass(int var1_,int var2_) {         此(var1_,var2_,FALSE); }

public MyClass(int var1_,int var2_,boolean flag_) {         var1 = var1_;         var2 = var2_;         flag = flag_; }

public String toString() {         return(new Boolean(flag).toString()); }

public static void main(String [] args) {         MyClass my = new MyClass(5,6);         的System.out.println(我的); }

}

所以它有效。

答案 5 :(得分:0)

this()不是一个方法,而是一个保留关键字,指向同一个类的重载构造函数。 您传递的参数数量应指向类中定义的现有相应构造函数。

super()也有语义,但构造函数是在其父层次结构中定义的。