主实例化两个对象时出现堆栈溢出错误?

时间:2014-10-19 18:05:44

标签: java

您好我还是Java和OOP的新手,并且在尝试编译代码时遇到了问题。我理解我的代码的问题是两次同一对象的实例化,但是我不确定如何解决这个问题以编译我的代码。

package week2;

import java.util.*

public class aBug {

    aBug theBug = new aBug();
    String Inspecies, Inname;
    int Inx, Iny, Inenergy, Inid;
    char Insymbol;

    Scanner scan = new Scanner(System.in);
    aWorld newWorld = new aWorld();

    public static void main(String[] args) {
        aBug theBug = new aBug();


        theBug.mainMenu();

    }

    public void mainMenu() {

        int choice;
        do {

            System.out.print("1\t Create bug\n");
            System.out.print("2\t Enter world\n");
            System.out.print("3\t Quit\n");
            choice = scan.nextInt();
            switch (choice) {

            case 1:
                bugInit();
                break;

            case 2:
                System.out.println();
                newWorld.mapInit(theBug.Inx, theBug.Iny, theBug.Insymbol);
                System.out.println();
                break;
            }
        } while (choice != 3);
    }

    public void bugInit() {
        String species, name;
        int x, y, energy, id;
        char symbol;



        System.out.print("Species: ");
        species = scan.nextLine();

        System.out.print("Name: ");
        name = scan.nextLine();

        System.out.print("X position: ");
        x = scan.nextInt();

        System.out.print("Y position: ");
        y = scan.nextInt();

        System.out.print("Energy: ");
        energy = scan.nextInt();

        System.out.print("ID: ");
        id = scan.nextInt();

        theBug.Insymbol = 'b';
        theBug.Inspecies = species;
        theBug.Inname = name;
        theBug.Inx = x;
        theBug.Iny = y;
        theBug.Inenergy = energy;
        theBug.Inid = id;

        System.out
                .format("\nThe bug is of the species %s, called %s, "
                        + "with positions %d & %d, with energy amount: %d, and %d as it's id number\n\n",
                        theBug.Inspecies, theBug.Inname, theBug.Inx, theBug.Iny,
                        theBug.Inenergy, theBug.Inid);

    }


}

1 个答案:

答案 0 :(得分:1)

在构造函数中:

public class aBug {
    aBug theBug = new aBug();
...
}

因此,在创建aBug的实例时(例如在main中),您调用new aBug(),它会反复调用构造函数,而不会溢出堆栈。

我不确定您认为为什么需要在其自身内创建对象的实例。因此很难给出任何提示。如果我猜对了,你合并了aBug和"主程序"的想法。在一堂课。你应该将它拆分并将aBug内部内容放在它自己的类中。