在同一构造函数中使用调用构造函数

时间:2017-01-06 11:14:03

标签: java constructor

public class MyClass {
    public static void main(String args[]) {
        new MyClass();
    }
    public MyClass() {
        new MyClass();
    }
}

在上面的代码中,在同一构造函数中调用构造函数。

上面代码的输出很有名java.lang.StackOverflowError,因为在发生错误之前会调用构造函数。

我的问题是在同一个构造函数中调用构造函数有用的真实场景是什么?

2 个答案:

答案 0 :(得分:3)

我确信可以发明一个场景,但是使构造函数递归通常不是一件有用的事情。一般来说,当构造函数在同一个类上调用new时,这是一个错误。

这是一个人为的例子,我们使用递归来构造一个具有相同值的N个副本的列表。

   public class MyList {
       private int value;
       private MyList next;

       public MyList(int value, int length) {
           this.value = value;
           if (length > 1) {
              next = new MyList(value, length - 1);
           }
       }
   }

(并且,是的,这种方法存在缺陷......)

答案 1 :(得分:3)

在某些情况下递归循环被破坏的情况下可能会有用 - 例如使用if语句:

class LinkedList {

    Object value;
    LinkedList next;

    public LinkedList(final Iterator<?> iterator) {
        this.value = iterator.next();
        if (iterator.hasNext()) {
            this.next = new LinkedList(iterator);
        }
    }
}

只要迭代器中有可用的元素,这将以递归方式调用构造函数。