2012-09-29 4 views
-1

Possible Duplicate:
non-static variable cannot be referenced from a static context (java)нестатическая переменная с не может ссылаться из статического контекста и не-статической переменной а нельзя ссылаться из статического контекста

Я пытаюсь создать более одного объектов (в данном случае автомобилей) из тот же класс, а затем я пытаюсь проверить, было ли создано c1 (имя объекта) (зная, что это было), а затем проверить, был ли создан c2 (другой объект того же класса) (зная, что это не так). Я создал класс Автомобиль: package parkingLot;

/** 
* 
* @author HASLima 
*/ 
public class Car { 

String brand; 
String plates; 
int mileage; 

public String getMarca() { 
    return brand; 
} 

public void setMarca(String brand) { 
    this.brand = brand; 
} 

public String getMatricula() { 
    return plates; 
} 

public void setMatricula(String plates) { 
    this.plates = plates; 
} 

public int getKilometros() { 
    return mileage; 
} 

public void setKilometros(int mileage) { 
    this.mileage = mileage; 
} 


} 

А потом создал класс Park: /* * Для того, чтобы изменить этот шаблон, выберите Tools | Шаблоны * и откройте шаблон в редакторе. */ упаковка парковкаLot;

/** 
* 
* @author HASLima 
*/ 
public class Park { 
    int nrOfCars; 
    int space; 
    Car[] c; 
    int a = 0; 

    public Park (int nrOfPlaces){ 
     space = nrOfPlaces; 
     nrOfCars = 0; 

    } 
    public static void main(String[] args) { 
     Park park1 = new Park(5); 
     c[a] = new Car(); 
    } 
} 

А вот проблема, то

с [а] = новый автомобиль();

возвращает эту ошибку:

нестатическая переменная с не может ссылаться из статического контекста и нестатической переменной а не ссылаться из статического контекста

+2

Причина такая же, как и в другой 1000 вопросы на этом сайте, которые задают одно и то же. –

ответ

3

Массив Car[] c определяется как объектная переменная Park, поэтому вы должны использовать park1.c[a] вместо того, чтобы пытаться позвонить по ссылке c[a]

Также переменная a является объектом парка, и вы не можете ссылаться на нее от main. Он должен быть park1.a или лучше, но обернул переменную с помощью геттера park1.getA()

+0

Странная вещь в том, что я сделал что-то похожее на это, но мне не нужно было ничего использовать перед c и ничего перед a. Но то, что вы сказали, работает так, отлично –

+0

@ HélderLima. Я рекомендую прочитать о Variable Scope http://www.java2s.com/Tutorial/Java/0020__Language/VariableScope.htm и о классах и экземплярах классов http: // docs .oracle.com/javase/tutorial/java/javaOO/classvars.html – gtgaxiola

+0

Теперь я получаю это: Исключение в теме "main" java.lang.NullPointerException \t на стоянкеLot.Park.main (Park.java:24) Java Результат: 1 –

1

Доступ к нестационарной переменной не допускается внутри статических методов, если вы не назовете их на свой экземпляр. В вашем случае, как с [] является переменной экземпляра, который не является статическим, и вы к нему доступ внутри статического метода youshould быть доступ к нему на парк instanc как это:

Park park1 = new Park(5); 
park1.c[park1.a] = new Car(); 
Смежные вопросы