Статическая ссылка на нестатическое поле Java error - PullRequest
2 голосов
/ 05 октября 2011

Я предвосхищу это, сказав, что я давний поклонник переполнения стека, и за последние несколько семестров я обычно мог найти ответ на все мои вопросы, даже не задавая ни одного.Однако у меня были проблемы со стековой программой.Там больше кода, чем это, но я думаю, что я сузил свою проблему до этой одной ошибки.В нем говорится

Исключение в потоке "main" java.lang.Error: Неразрешенные проблемы компиляции:

Невозможно сделать статическую ссылку на нестатическое поле Stack1
Конструктор Stack (int) не определен

в stack.main (stack.java:11)

Может кто-нибудь объяснить, в чем может быть проблема?Или, еще лучше, указать мне куда-нибудь, что это объяснит?Я пытался найти его в Overflow и через Google, но я думаю, что сочетание незнания того, что я на самом деле ищу, и / или усталости мешает мне найти конкретный ответ.Спасибо за любую помощь заранее.

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 ]

1 голос
/ 05 октября 2011

В следующей строке -

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);
}
1 голос
/ 05 октября 2011

Переименуйте свой класс в «Стек» (заглавными буквами) и измените строку:

Stack1 = new Stack(5)

до:

Stack stack1 = new Stack(5);
0 голосов
/ 05 октября 2011

Stack1 является переменной экземпляра класса stack.В вашем статическом методе main вы пытаетесь сохранить значение в переменной Stack1, даже если это переменная экземпляра.Кроме того, вы пытаетесь присвоить тип, не являющийся массивом, переменной, тип которой равен массив из Object.Кроме того, у вас есть конструктор для Stack (обратите внимание на верхний регистр), хотя класс называется stack в нижнем регистре.

0 голосов
/ 05 октября 2011

Сохраняя объявление класса в нижнем регистре, я предполагаю, что присвоение

   Stack1 = new Stack(5);

не то, что вы имели в виду.Скорее:

Stack1 stack = new stack(5);
0 голосов
/ 05 октября 2011

Ваш класс объявлен как stack в нижнем регистре.

...