2

我正在尝试创建一个包含 10 个帐户对象的数组,但是当我尝试运行它时,我收到了 Stack Overflow 错误。我不知道为什么我会收到错误,而 Google 也没有提出任何建议。谢谢你的帮助。

import java.util.Scanner;

public class Account {

private int id;
private double balance;
private Scanner input = new Scanner(System.in);
private Account[] atm = new Account[10];

public Account(){
    id = 0;
    balance = 0;

    for (int i = 0; i < atm.length; i++){
        atm[i] = new Account(); //Here is where Eclipse says the problem is
        atm[i].setID(i);
        atm[i].setBalance(100.0);
        }
}
4

1 回答 1

4

让我们看看会发生什么:当你创建一个 Account 对象时,它会创建一堆新的 Accounts,每个 Accounts 都会创建一个 Accounts,每个 Accounts 都会创建一个 Accounts,每个 Accounts 都会创建一个 Accounts,每个 Accounts 都会创建更多帐户,每个帐户创建更多...

你在这里看到一个模式吗?它被称为无限递归,或者至少在堆栈内存用完之前 - 这会导致 StackOverflowException。

现在有一个解决方案:
我不会让我的 Account 类保存一个 Account 数组,而是将该数组放在另一个类中,比如 AccountCollection 或 Accounts,如果所有的 Accounts 都由一个客户持有,甚至可能是 Customer。

于 2013-10-04T00:59:06.150 回答