2016-03-21 187 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); 

    } 
} 

此方法不適用於錯誤非靜態變量,因此無法從靜態上下文中引用它。如何在靜態方法中訪問靜態和非靜態方法

+5

那麼考慮到不同的車可以有不同的顏色,但在靜態方法你不能在任何一臺車的情況下,你指望* *它來打印的顏色? (我的猜測是,現在對你來說修改'靜態'意味着什麼時候 - 希望它會變得更加明顯。) –

+0

你應該考慮將模型和名稱改爲非靜態的。如果你想保持靜態,爲什麼你會把顏色變成非靜態的? –

+0

所有的汽車都是翻修的嗎? –

回答

0

您可以訪問公共靜態方法的每一個地方,但你只能夠通過類的實例來訪問靜態方法非靜態方法

0

我建議要麼把一切都靜止(或局部使用構造)。

當使其成爲當地的構造可以是這樣的:

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); 
} 

現在你可以使用Car car = new Car(2005, "Corvet", "Blue");然後car.show(),而不必擔心靜態和非靜態訪問。

0

像Jon Skeet在他的評論中所說的,你可能不希望你的方法是靜態的,這意味着所有類的成員都有一種方法。

如果你覺得有必要使用一個靜態方法,你可以通過它在:static void show(String color)

0

你應該與類名訪問靜態變量

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

} 
0

您可以考慮通過Car對象的靜態方法,而不是創建它的新實例。 「規則」是靜態方法不能訪問實例變量和方法,但它可以接收外部對象並與它們一起玩。

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

    } 
}