静态引用非静态字段Java错误

时间:2011-10-05 03:04:17

标签: java static reference stack non-static

我会说这是我一直是Stack Overflow的老粉丝,在过去的几个学期里,我通常能够找到所有问题的答案,而不是真正问一个问题。但是,我一直遇到堆栈程序问题。代码多于此,但我认为我已将问题缩小到这一个错误。它声明

  

线程“main”中的异常java.lang.Error:未解析的编译   问题:

     
    

无法对非静态字段Stack1进行静态引用     构造函数Stack(int)未定义

  
     

at stack.main(stack.java:11)​​

任何人都可以解释这个问题是什么吗?或者更好的是,把我指向可以解释它的某个地方?我试过在Overflow和谷歌上查找它,但我认为不知道我实际上在寻找什么和/或疲劳的组合阻止我找到一个具体的答案。在此先感谢您的帮助。

public class stack {
private Object[] Stack1;
private int topOfStack;
private int max;
//private int empty;
//private int capacity;

public static void main(String[] args) {
Stack1 = new Stack(5);

}

public Stack(int size) {
    if (size < 0){
        throw new IllegalArgumentException("Parameter must be >0. Parameter was " + size + ".");
    }

    max = size; 
    Stack1 = (Object[]) (new Object[size]);
    topOfStack = -1;
}
   }

5 个答案:

答案 0 :(得分:1)

将您的类重命名为“Stack”(大写)并更改行:

Stack1 = new Stack(5)

为:

Stack stack1 = new Stack(5);

答案 1 :(得分:1)

在以下行中 -

private Object[] Stack1;

Stack1不是静态

在下文中,您尝试引用Stack1 -

public static void main(String[] args) {
    Stack1 = new Stack(5);
}

来自main静态

因此 -

  

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

您的构造函数名称Stack与类名stack不匹配。所以 -

  

构造函数Stack(int)未定义

可能是,您想要为您的班级Stack以及main以下内容命名 -

public static void main(String[] args) {
    Stack stack1 = new Stack(5);
}

答案 2 :(得分:0)

您的班级被声明为stack小写。

答案 3 :(得分:0)

Stack1stack类的实例变量。在静态main方法中,即使它是一个实例变量,也会尝试在Stack1变量中存储一个值。此外,您尝试将非数组类型分配给类型为{{1>}的数组的变量。此外,您有Object的构造函数(注意大写),即使该类以小写形式调用Stack

答案 4 :(得分:0)

保持小写类声明,我猜测作业

   Stack1 = new Stack(5);

不是你的意思。相反:

Stack1 stack = new stack(5);