1

如果我有一个构造函数

public class Sample {


    public static StackOverflowQuestion puzzled;
    public static void main(String[] args) {

        puzzled = new StackOverflowQuestion(4);
    }
}

在我拥有的程序的主要方法中

public class StackOverflowQuestion {

    public StackOverflowQuestion(){
    //does code
    }

    public StackOverflowQuestion(int a){
    this();
   }
}

这是通过constructor2创建一个StackOverflowQuestion实例,然后通过constructor 1创建另一个StackOverflowQuestion实例,因此我现在有两个StackOverflowQuestion实例直接在彼此内部?

或者在这种情况下,constructor2 是否会横向调整,然后通过 constructor1 创建 StackOverflowQuestion 的实例?

4

5 回答 5

4

我想你的意思是:

public class StackOverflowQuestion
{

    public StackOverflowQuestion(){ // constructor
       //does code
    }

    public StackOverflowQuestion(int a){ // another constructor
       this();
    }
}

并称它为:

StackOverflowQuestion puzzled = new StackOverflowQuestion(4);

这只会创建一个对象,因为new只执行一次。该调用this()将执行另一个构造函数中的代码,而不创建新对象。该构造函数中的代码能够修改当前创建的实例。

于 2013-04-24T08:26:11.787 回答
3

它只创建一个实例。它的一种用例是为构造函数参数提供默认值:

public class StackOverflowQuestion
{
    public StackOverflowQuestion(int a) {
        /* initialize something using a */
    }

    public StackOverflowQuestion() {
        this(10); // Default: a = 10
    }
}
于 2013-04-24T08:25:36.357 回答
1

this()不一样new StackOverflowQuestion()

this(5)不一样new StackOverflowQuestion(5)

this()this(5)调用同一类中的另一个构造函数。

因此在本例中:

public class StackOverflowQuestion
{
    private int x;
    private int y;
    private int a;

    public StackOverflowQuestion(){
       this.x = 1;
       this.y = 2;
    }

    public StackOverflowQuestion(int a){
       this();
       this.a = a;
    }
}

调用this()只会初始化对象而不创建新实例。记住new StackOverflowQuestion(5)已经调用了构造函数,该构造函数实际上创建了StackOverflowQuestion对象的新实例

于 2013-04-24T08:37:25.823 回答
1

Aconstructor不创建对象。它只是初始化对象的状态。它是new创建对象的操作员。通读创建新类实例 - JLS。现在这是什么意思:

public class StackOverflowQuestion
{

   public StackOverflowQuestion(){ // constructor
      //does code
  }

  public StackOverflowQuestion(int a){ // another constructor
     this();
  }
}

 StackOverflowQuestion puzzled = new StackOverflowQuestion(4);

一个新对象StackOverflowQuestionnew操作员创建,就在对新创建对象的引用作为结果返回并分配给StackOverflowQuestion puzzled引用变量之前,构造函数StackOverflowQuestion(int a)调用this()public StackOverflowQuestion(),默认构造函数内的代码(如果有)运行并且控件回到 `StackOverflowQuestion(int a),内部的剩余代码(如果有)被处理以初始化新对象。

于 2013-04-24T08:30:53.600 回答
0

类的实例是在您使用“new”运算符时创建的。创建一个没有构造函数的类是完全可能的,因为在这种情况下,默认情况下,没有参数的构造函数是可用的。

“this”关键字只是指向这个特定的对象,所以调用“this()”意味着“调用我自己的构造函数,没有参数并执行里面的东西”

于 2013-04-24T08:31:32.267 回答