为什么这个构造函数链接会导致堆栈溢出(java)
我有下面的代码,但它导致java.lang.StackOverflower错误。 我想在第二个构造函数中创建一个新对象可能会 导致了一个无限循环或其他什么。但我不完全明白 为什么会这样。有人能给我解释一下吗?我会很感激的为什么这个构造函数链接会导致堆栈溢出(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
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());
}