Java 为什么main(String[]args)不接受此选项?

Java 为什么main(String[]args)不接受此选项?,java,arrays,Java,Arrays,您在这里看到的代码有些未完成;但我正在尝试测试推送和弹出功能。但是,我不断收到一条错误消息,说明: 无法对非静态字段堆栈进行静态引用 import java.util.ArrayList; 导入java.util.Iterator; 导入java.util.NoSuchElementException; 类IntegerStack泛型扩展IntegerStack{ 阵列列表堆栈; IntegerStackGeneric(){ stack=newarraylist(); } 公共无效推送(int

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

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

import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.NoSuchElementException;
类IntegerStack泛型扩展IntegerStack{
阵列列表堆栈;
IntegerStackGeneric(){
stack=newarraylist();
}
公共无效推送(int x){
叠加(x);
返回;
}
public int pop()抛出NoTouchElementException{
如果(!stack.isEmpty()){
抛出新的NoSuchElementException(“IntegerStackGeneric:pop()”;
}
返回stack.remove(stack.size()-1);
}
公共整数大小(){
返回stack.size();
//返回-1;
}
公共布尔包含(int x){
返回false;
}
公共无效反向(){
返回;
}
公共迭代器迭代器(){
返回新的ArrayList().iterator();
}
公共静态void main(字符串[]args){
堆栈推送(1);
栈推(2);
堆栈推送(3);
System.out.println(堆栈);
System.out.println(stack.pop());
System.out.println(堆栈);
}
}

有人有什么想法吗?

答案就在错误消息中:

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

您的
堆栈
字段是一个实例字段
main
是一个
static
方法,此时没有实例。如果要使用
堆栈
,则需要一个实例,例如:

IntegerStackGeneric isg = new IntegerStackGeneric();
isg.stack.push(/*...*/);
您可能希望将逻辑放在从
main
调用的实例方法中,而不是直接放在
main
中,不过:

IntegerStackGeneric isg = new IntegerStackGeneric();
isg.doStuff();
以及:


您是否查找过关于对非静态字段的静态引用的其他问题?
ArrayList stack
是非静态字段,但
main()
在静态环境中运行。您需要首先创建一个
IntegerStackGeneric
对象,以便访问实例字段。直接从main方法调用可运行类而不获取实例。这意味着它有“null”实例。静态方法可以从其他类(如果它们是公共的或可调用的)调用,而无需获取实例。如果像这里这样从static方法中定义变量,那么应该使用与static相同的修饰符来调用它。你还需要初始化。我有一个IntegerStackGeneric,看看top@Jacklyn:您在试图使用它的
main
中没有。事实上,你根本没有
IntegerStackGeneric
的实例(在你引用的代码中没有
新的IntegerStackGeneric
)。我真的应该知道这是一个重复,把答案改成了一个非重复的CW。我不太清楚我是否理解;我已经有了一个IntegerStackGeneric(),我已经把main中的东西移到了你建议的“doStuff”中。但是它给了我同样的错误,但是现在在doStuff()@Jacklyn中:代码中的
IntegerStackGeneric()
是一个构造函数,而不是一个创建实例的表达式。(对于后者,它必须在某个东西(例如,一个方法)中,并且前面有
new
)我建议学习一些Java教程,.T.J.,Jacklyn正试图自己实现一个堆栈。我想;至少我误解了他/她。实际上,他/她需要在main方法中获取她的IntegerStackGeneric类的实例。然后他/她可以使用她的方法@Jacklyn我编辑了你的代码,你能试试吗?@AfsinBuyuksarac“我编辑了你的代码,你能试试吗?”既然你的编辑被拒绝了,你应该先了解Stackoverflow是如何工作的。说明何时应编辑问题。你的编辑不合适。
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);
}