2016-03-21 14 views
1
public class Car { 

    static int model = 2005; 
    static String name = "corvert"; 
    private String color; 

    public String getColor() { 
     return color; 
    } 

    public void setColor(String color) { 
     this.color = color; 
    } 

    static void show() { 
     System.out.println("model" + amodel + "name" + name + "color" + this.color); 

    } 
} 

Diese Methode funktioniert nicht mit Fehler nicht statische Variable, die nicht aus einem statischen Kontext verwiesen werden kann.Zugriff auf statische und nicht statische Methode in der statischen Methode

+5

Gut gegeben, dass verschiedene Autos verschiedene Farben haben können, aber in der statischen Methode sind Sie im Zusammenhang mit einem Auto nicht, welche Farbe Sie * Sie erwarten * ausdrucken zu? (Meine Vermutung ist, dass es jetzt eine gute Zeit für Sie wäre, zu revidieren, was "statisch" bedeutet - hoffentlich wird es dann offensichtlicher.) –

+0

Sie sollten darüber nachdenken, das Modell und den Namen auf nicht statisch zu ändern. Wenn Sie möchten, dass das statisch bleibt, warum sollten Sie die Farbe nicht statisch machen? –

+0

Sind alle Autos Corverts? –

Antwort

0

Sie die öffentliche statische Methode überall zugreifen kann, aber Sie nur in der Lage über eine Instanz der Klasse nicht-statische Methode in statischer Methode für den Zugriff auf

0

würde ich vorschlagen, entweder macht alles statisch (oder lokal mit einem Konstruktor).

Wenn es vor Ort machen den Konstruktor wie folgt aussehen:

private int model; 
private String name, color; 
public Car(int model, String name, String color) { 
    this.model = model; 
    this.name = name; 
    this.color = color; 
} 

// setters and getters 

public void show() { 
    System.out.println("model" + amodel + "name" + name + "color" + this.color); 
} 

Jetzt können Sie Car car = new Car(2005, "Corvet", "Blue"); verwenden und dann car.show() und müssen nicht über statische und nicht-statische Zugang sorgen.

0

Wie Jon Skeet in seinem Kommentar sagte, möchten Sie vielleicht nicht, dass Ihre Methode statisch ist, was bedeutet, dass es eine Methode für alle Mitglieder der Klasse gibt.

Wenn Sie das Bedürfnis verspüren, eine statische Methode zu verwenden, können Sie es passieren: static void show(String color)

0

Statische Variable, die Sie mit Klassennamen

static void show() { 
    System.out.println("model" + amodel + "name" + name + "color" + Car.color); 

} 
0

Sie betrachten Objekt Auto vorbei kann auf den statischen Zugriff sollte Methode, anstatt eine neue Instanz davon zu erstellen. Die "Regel" ist, dass statische Methoden nicht auf Instanzvariablen und Methoden zugreifen können, aber es kann externe Objekte empfangen und mit ihnen spielen.

static void show(Car car) { 
     System.out.println("model" + model + "name" + name + "color" + car.color); 

    } 
} 
Verwandte Themen