2012-09-29 53 views
-1

Possible Duplicate:
non-static variable cannot be referenced from a static context (java)非靜態變量c不能從靜態上下文和非靜態變量的引用不能從靜態上下文

我的努力創建多個對象(在這種情況下,汽車)引用然後我試着檢查c1(對象的名稱)是否被創建(知道它是),然後檢查是否創建了c2(同一類的其他對象)(知道它不是)。 我創建了班車: 包停車場;

/** 
* 
* @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; 
} 


} 

然後創建的類公園: /* * 要改變這個模板,選擇Tools |模板 *並在編輯器中打開模板。 */ 包停車場;

/** 
* 
* @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(); 
    } 
} 

這裏是問題,

C [A] =新汽車();

返回此錯誤:

非靜態變量c不能從靜態上下文 和 非靜態變量不能從靜態上下文

+2

的原因是一樣的,在其他1000這個網站上的問題提出了同樣的問題。 –

回答

3

引用的陣列Car[] c被定義爲一個被引用公園的對象變量,因此必須使用park1.c[a],而不是試圖調用參考c[a]

也是可變的a是公園的對象,您不能引用它,來自main。它應該是park1.a或更好,但用getter封裝變量park1.getA()

+0

事情是,我做了類似的事情,但是我沒有在c之前使用任何東西,也沒有在a之前使用任何東西。但是你所說的工作如此完美 –

+0

@HélderLima我會推薦閱讀關於變量範圍http://www.java2s.com/Tutorial/Java/0020__Language/VariableScope.htm以及關於類和類的實例http:// docs .oracle.com/javase/tutorial/java/javaOO/classvars.html – gtgaxiola

+0

現在我得到這個:Exception in thread「main」java.lang.NullPointerException \t at parkingLot.Park.main(Park.java:24) Java結果:1 –

1

非靜態變量不能在靜態方法內訪問,除非您在其實例上調用它們。 在你的情況爲c []是一個實例變量而言不是靜態的,要訪問它成規靜態方法內部訪問它在公園instanc這樣的:

Park park1 = new Park(5); 
park1.c[park1.a] = new Car(); 
相關問題