为什么main(String [] args)不接受这个?

时间:2015-10-03 13:41:34

标签: java arrays

你在这里看到的代码有点未完成;但我正在尝试测试推送和弹出功能。但是我不断收到一条错误消息:

  

无法对非静态字段堆栈进行静态引用。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;

class IntegerStackGeneric extends IntegerStack {
    ArrayList<Integer> stack;

    IntegerStackGeneric() {
        stack = new ArrayList<>();
    }

    public void push(int x) {
        stack.add(x);
        return;
    }

    public int pop() throws NoSuchElementException {
        if(!stack.isEmpty()) {
            throw new NoSuchElementException("IntegerStackGeneric: pop()");
        }
        return stack.remove(stack.size()-1);
    }

    public int size() {
        return stack.size();
        // return -1;
    }

    public boolean contains(int x) {
        return false;
    }

    public void reverse() {
        return;
    }

    public Iterator<Integer> iterator() {
        return new ArrayList<Integer>().iterator();
    }

    public static void main(String[] args) {
        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);
        System.out.println(stack.pop());
        System.out.println(stack);
    }
}

有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

答案就在错误信息中:

  

无法对非静态字段堆栈进行静态引用。

您的stack字段是实例字段。 mainstatic方法,此时没有实例。如果您想使用stack,则需要一个实例,例如:

IntegerStackGeneric isg = new IntegerStackGeneric();
isg.stack.push(/*...*/);

您可能希望将逻辑放在从main调用的实例方法中,而不是直接放在main中:

IntegerStackGeneric isg = new IntegerStackGeneric();
isg.doStuff();

private void doStuff() {

    stack.push(1);
    stack.push(2);
    stack.push(3);
    System.out.println(stack);
    System.out.println(stack.pop());
    System.out.println(stack);
}