代码之家  ›  专栏  ›  技术社区  ›  Chinmoy Acharjee

获取StackOverflow错误以及原因?[副本]

  •  -1
  • Chinmoy Acharjee  · 技术社区  · 7 年前

    我收到错误的行: 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();
    }
    

    3 回复  |  直到 7 年前
        1
  •  1
  •   davidxxx    7 年前

    这个 JavaInnerClass 构造函数调用 Dog JavaInnerClass 调用


    构造函数。

    dog :

    Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
    

    但是 构造函数?
    JavaInnerClass :

    public Dog(String animalName, int animalQuantity) {
         ...
        System.out.println(new JavaInnerClass().callInnerClassMethod(animalQuantity));
    }
    

    这一切一直持续到堆栈溢出。

        2
  •  0
  •   ElDuderino    7 年前

    您正在JavaInnerclass中创建狗

    Dog[] dog = { new Dog("Husky", 90), new Dog("Boxer", 100) };
    

    每次实例化新对象时,都会创建它们。

    当你创建一只新狗时,你就创建了一个新的JavaInnerClass

    new JavaInnerClass().callInnerClassMethod(animalQuantity)
    

        3
  •  0
  •   jwir3    7 年前

    发生这种情况的原因是当 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 构造函数创建新的 :

    public class JavaInnerClass {
    // this program is written to understand inner class..
    Dog[] dog = { new Dog("Husky", 90), new Dog("Sheppered", 100) };
    ...
    }
    

    这反过来又创造了一个新的 JavaInnerClass ,等等…直到系统耗尽堆栈空间。