Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在同一构造函数中使用调用构造函数_Java_Constructor - Fatal编程技术网

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

Java 在同一构造函数中使用调用构造函数,java,constructor,Java,Constructor,在上面的代码中,构造函数在同一个构造函数中调用 上面代码的输出是著名的java.lang.StackOverflowerError,因为在错误发生之前会调用构造函数 我的问题是,在什么样的真实场景中,在同一个构造函数中调用构造函数是有用的?我相信人们可以发明一个场景,但让构造函数递归通常不是一件有用的事情。一般来说,当构造函数在同一个类上调用new时,这是一个错误 这里是一个人为的例子,在这个例子中,我们使用递归来构造相同值的N个副本的列表 public class MyClass {

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

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


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

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


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

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

(是的,这种方法存在缺陷…

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


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

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

(是的,这种方法存在缺陷…

在递归循环在某个点中断的情况下,它可能很有用-例如,使用
if
语句:

   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);
           }
       }
   }
类链接列表{
目标价值;
LinkedList下一步;
公共链接列表(最终迭代器迭代器){
this.value=iterator.next();
if(iterator.hasNext()){
this.next=新链接列表(迭代器);
}
}
}

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

它可能在递归循环在某个点中断的情况下很有用,例如使用
if
语句:

   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);
           }
       }
   }
类链接列表{
目标价值;
LinkedList下一步;
公共链接列表(最终迭代器迭代器){
this.value=iterator.next();
if(iterator.hasNext()){
this.next=新链接列表(迭代器);
}
}
}

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

这是为了什么?我个人觉得它没有什么实际用途,除非你有另一个构造函数接受参数,然后在另一个构造函数中调用它们是有意义的。可能有一个
节点
构造函数自动想要为新生成的便笺创建一个层次结构,并且正在调用另一个重载构造函数。这是为了什么?我个人觉得它没有什么实际用途,除非你有另一个构造函数接受参数,然后在另一个构造函数中调用它们是有意义的。可能有一个
节点
构造函数,它自动想要为新生成的便笺创建一个层次结构,尽管它正在调用另一个重载构造函数。