收到 StackOverflow 错误,为什么?
Getting StackOverflow error and why?
为什么我在第 11 行收到 WhosebugError。
我收到错误的行:System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
完整代码如下:
public class Dog extends Animal {
private String animalName;
private int animalQuantity;
public Dog(String animalName, int animalQuantity) {
animalName(animalName);
quantity(animalQuantity);
// JavaInnerClass.tempDog name = new JavaInnerClass.tempDog();
// System.out.println(name.totalQuantity(animalQuantity));
System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
}
@Override
public String animalName(String animalName) {
this.animalName = animalName;
return animalName;
}
@Override
public int quantity(int animalQuantity) {
this.animalQuantity = animalQuantity;
return animalQuantity;
}
}
JavaInnerClass:
public class JavaInnerClass {
Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
tempDog temp = new tempDog();
public static class tempDog {
public int totalQuantity(int quantity) {
return quantity + 200; // assuming a statement
}
}
public int callInnerClassMethod(int quantity) {
return temp.totalQuantity(quantity);
}
public static void main(String[] args) {
new JavaInnerClass();
}
}
JavaInnerClass
构造函数调用Dog
构造函数,JavaInnerClass
构造函数调用Dog
构造函数……依此类推……
查看JavaInnerClass
构造函数。
初始化数组字段 dog
:
Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
但是 Dog
构造函数是做什么的?
它创建了一个实例 JavaInnerClass
:
public Dog(String animalName, int animalQuantity) {
...
System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
}
这一切一直持续到 Whosebug。
您正在 JavaInnerclass 中创建狗
Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
每次实例化新对象时都会创建它们。
并且当你创建一个新的 Dog 时,你创建了一个新的 JavaInnerClass
new JavaInnerClass().callInnerClassMethod(animalQuantity)
这是一个循环。
发生这种情况的原因是当构建 Dog
时,您提到的行创建了一个新的 JavaInnerClass
对象:
public Dog(String animalName, int animalQuantity) {
animalName(animalName);
quantity(animalQuantity);
// JavaInnerClass.tempDog name = new JavaInnerClass.tempDog();
// System.out.println(name.totalQuantity(animalQuantity));
System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
}
但是,然后 JavaInnerClass
构造函数创建一个新的 Dog
:
public class JavaInnerClass {
// this program is written to understand inner class..
Dog[] dog = { new Dog("Husky", 90), new Dog("Sheppered", 100) };
...
}
这反过来会创建一个新的 JavaInnerClass
,依此类推...直到系统用完堆栈 space。
因此,您需要确保在调用递归方法时没有方法调用循环。似乎您对 class 定义的内联有一些问题,所以也许如果您告诉我们您正在尝试做什么,我们也许可以为您提供更多帮助。
为什么我在第 11 行收到 WhosebugError。
我收到错误的行:System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
完整代码如下:
public class Dog extends Animal {
private String animalName;
private int animalQuantity;
public Dog(String animalName, int animalQuantity) {
animalName(animalName);
quantity(animalQuantity);
// JavaInnerClass.tempDog name = new JavaInnerClass.tempDog();
// System.out.println(name.totalQuantity(animalQuantity));
System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
}
@Override
public String animalName(String animalName) {
this.animalName = animalName;
return animalName;
}
@Override
public int quantity(int animalQuantity) {
this.animalQuantity = animalQuantity;
return animalQuantity;
}
}
JavaInnerClass:
public class JavaInnerClass {
Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
tempDog temp = new tempDog();
public static class tempDog {
public int totalQuantity(int quantity) {
return quantity + 200; // assuming a statement
}
}
public int callInnerClassMethod(int quantity) {
return temp.totalQuantity(quantity);
}
public static void main(String[] args) {
new JavaInnerClass();
}
}
JavaInnerClass
构造函数调用Dog
构造函数,JavaInnerClass
构造函数调用Dog
构造函数……依此类推……
查看JavaInnerClass
构造函数。
初始化数组字段 dog
:
Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
但是 Dog
构造函数是做什么的?
它创建了一个实例 JavaInnerClass
:
public Dog(String animalName, int animalQuantity) {
...
System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
}
这一切一直持续到 Whosebug。
您正在 JavaInnerclass 中创建狗
Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
每次实例化新对象时都会创建它们。
并且当你创建一个新的 Dog 时,你创建了一个新的 JavaInnerClass
new JavaInnerClass().callInnerClassMethod(animalQuantity)
这是一个循环。
发生这种情况的原因是当构建 Dog
时,您提到的行创建了一个新的 JavaInnerClass
对象:
public Dog(String animalName, int animalQuantity) {
animalName(animalName);
quantity(animalQuantity);
// JavaInnerClass.tempDog name = new JavaInnerClass.tempDog();
// System.out.println(name.totalQuantity(animalQuantity));
System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
}
但是,然后 JavaInnerClass
构造函数创建一个新的 Dog
:
public class JavaInnerClass {
// this program is written to understand inner class..
Dog[] dog = { new Dog("Husky", 90), new Dog("Sheppered", 100) };
...
}
这反过来会创建一个新的 JavaInnerClass
,依此类推...直到系统用完堆栈 space。
因此,您需要确保在调用递归方法时没有方法调用循环。似乎您对 class 定义的内联有一些问题,所以也许如果您告诉我们您正在尝试做什么,我们也许可以为您提供更多帮助。