2017-02-28 5 views
-3

Versuchen, eine nicht-statische Methode in einer Klasse aus meiner Hauptklasse aufzurufen, eine Instanz der Hauptklasse erstellt und versuchen, die Methode von einer nicht statischen Methode auszuführen, aber ich bekomme immer noch eine "nicht-statische Methode kann nicht von einem statischen Kontext "Fehler verwiesen werden.Nicht statische Methode wirkt statisch?

Hauptklasse sieht so aus;

public class WeatherController { 
    public static void main(String[] args) { 
     WeatherController mainController = new WeatherController(); 
     mainController.doStuff(); 
    } 

    public void doStuff() { 
     WeatherObservation newObservation = new WeatherObservation("Whyalla", "28-02-17", 38, 0, 1.3, 1); 
     WeatherObservation.printObservation(newObservation); 
     WeatherHistory newHistory = new WeatherHistory(); //Create new History Array 
     newHistory.arrayAdd(newObservation);    //Add the Observation to it. 

// These are the problem methods: 
     WeatherHistory.arrayPrint(newHistory); 
     WeatherObservation.setTemp(10); 
    } 
} // End Class 

doStuff sollte nicht statisch sein, weil ich es auf einer Instanz von mainController ausführen, oder? Aber es kann setTemp oder arrayPrint nicht aufrufen.

+3

Nur weil Sie eine Instanz von 'WeatherController' bedeutet nicht, können Sie Instanzmethoden' WeatherHistory' nennen oder 'WeatherObservation 'ohne eine Instanz dieser Klassen. – shmosel

Antwort

3
WeatherHistory.arrayPrint(newHistory); 
WeatherObservation.setTemp(10); 

Dies sind statische Anrufe, ersetzen Sie sie mit folgenden Code:

newHistory.arrayPrint(newHistory); 
newObservation.setTemp(10); 
+1

Oder machen Sie sie statisch, wie 'WeatherObservation.printObservation()' vermutlich ist. Scheint nützlicher als 'newHistory.arrayPrint (newHistory)'. – shmosel

+0

Das hat es getan, und ich denke, ich sehe warum, danke. – DataThrust

Verwandte Themen