【问题标题】:Adding to a static member field添加到静态成员字段
【发布时间】:2015-06-28 02:25:49
【问题描述】:

我无法理解静态成员字段。我有这段代码:

Stats.java

private static List<Stats> staTest = new ArrayList<Stats>();
private String test, test2;

public Stats() {
    staTest.add(new Stats("foo", "bar"));
}

public Stats(String de, String mo) {
    staTest.add(new Stats(de, mo));
}

public String getTest(int i) {
    return staTest.get(i).test;
}

public void setTest(String t, int i) {
    staTest.get(i).test = t;
}

在我的其他班级:

private String foo, bar;
Stats sta;

public void something(String f, String b)
{
    sta = new Stats(f, b);
}

我在这一行收到 StackOverflow 错误:staTest.add(new Stats(de, mo))。请帮助我理解静态变量和调用。谢谢。

【问题讨论】:

    标签: java static static-methods


    【解决方案1】:

    您的问题与静态无关,而与您在 Stats 对象构造函数中创建新的 Stats 对象有关。这种设置最终会创建无穷无尽的 Stats 对象,直到您用完堆栈内存并且您的程序抛出 StackOverflow 错误。不要这样做。

    也许添加this

    public Stats() {
        staTest.add(this);
    }
    
    public Stats(String de, String mo) {
        this.test = de;
        this.test2 = mo;
        staTest.add(this);
    }
    

    【讨论】:

    • 默认的构造函数调用只是使 test 和 test2 为空或空字符串?
    • @c.C:默认构造函数将 test 和 test2 保留为空。如果你想让它们空白,那么你需要这样分配它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多