Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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.StackOverflower错误。 我想在第二个构造函数中创建一个新对象可能会 导致了一个无限循环或其他什么。但我不完全明白 为什么会这样。有人能给我解释一下吗?我会很感激的 private double x; private double y; private double z; private double[] elements; /** * Creates a 3D vector from an array * @param v array

我有下面的代码,但它导致java.lang.StackOverflower错误。 我想在第二个构造函数中创建一个新对象可能会 导致了一个无限循环或其他什么。但我不完全明白 为什么会这样。有人能给我解释一下吗?我会很感激的

private double x;
private double y;
private double z;
private double[] elements;
/**
 * Creates a 3D vector from an array
 * @param v array containing 3 components of the desired vector 
 */
public Vector3(double[] v) {
    this(v[0], v[1], v[2]);
}

/**
 * Creates a 3D vector from 3 numeric scalar components
 * @param x x coordinate
 * @param y y coordinate
 * @param z z coordinate
 */
public Vector3(double x, double y, double z) {
    this(new Vector3(x, y, z));
}

/**
 * Clones an existing vector
 * @param old an existing Vector3 object 
 */
public Vector3(Vector3 old) {
    x = old.x;
    y = old.y;
    z = old.z;
    elements = new double[3];
    elements[0] = x;
    elements[1] = y;
    elements[2] = z;
}
我不确定你要做什么,但你似乎在调用Vector3构造函数本身。这导致了构造函数中的无限循环。

public Vector3(double x, double y, double z) {
    this(new Vector3(x, y, z));
}
您一次又一次地调用同一个构造函数(即
newvector3(x,y,z)
)。这导致国有企业破产。这发生在调用
This(…)
的复制构造函数有机会之前

假设以下类别

public class Vector3 {
    // No need for an array. Or if you want an array, discard the doubles.
    double x;
    double y;
    double z;

    public double getX() { return x; }
    public double getY() { return y; }
    public double getZ() { return z; }
}
组建施工人员的正确方法如下:

1) 从使用所有基本数据构建整个实例的构造函数开始:

public Vector3(double x, double y, double z) {
    this.x = x;
    this.y = y;
    this.z = z;
}
2) 如果您想添加其他一些方便的构造函数,请按照他的方式进行:

public Vector3(double[] elements) {
    this(elements[0], elements[1], elements[2]);
}
3) 副本构造函数的处理方法与以下方法相同:

public Vector3(Vector3 origin) {
    this(origin.getX(), origin.getY(), origin.getZ());
}

所有其他构造函数都可以通过调用第一个构造函数来构建

构造一个实例来构造一个实例无论如何都是一件奇怪的事情…为什么你需要
元素
以及
x
y
z
?是的,我知道我不能在它内部调用构造函数。我需要x,y,z来表示一个叫做向量的物体。但是现在一些答案真的很有帮助,现在我知道为什么我把它放错了,他试图用它来调用复制构造函数!我知道,但复制构造函数的参数是再次调用3参数构造函数@seelenVirtuosey你知道吗?好吧,那么我误解了你的话“我不知道你要做什么”。非常感谢!现在我明白代码背后的工作原理了非常感谢!是的,我在做一个构造函数链接,现在我知道怎么做了。我真的很感激你的回答,它非常有帮助!
public Vector3(Vector3 origin) {
    this(origin.getX(), origin.getY(), origin.getZ());
}