java static變數和方法的觀念與使用

首先我們先了解一下何時需要使用static

對一個相同的類別,產生多個物件時,每個物件都各自產生了自己的變數或方法,但是當我們想要所有物件都共用一個變數或方法,而不要各自擁有時,要怎麼做 ?。

對一個相同的類別,產生多個物件時,每個物件都各自產生了自己的變數或方法,但是當我們想要簡單操作某個變量,要怎麼做 ?。

舉例 :
若我們針對下列類別,建立了多個物件(Car)。 
public class Car
{
    //名稱
    string name;
    //價錢
    int price;
    //發售地點
    string place;
     //取得價錢
    int getprice()
    {
        return  price;
    }
}
Car Audi = new Car();
Car Bmw= new Car();
每個物件(Audi、Bmw)都各自擁有自己的名稱、價錢、發售地點及方法。





但是如果某個變數不需要每個物件都各自擁有,而是固定的,或者需要共享,就可以宣告static,例如發售地點(place),每台車都在台灣,怎麼做 ?

public class Car
{
    //名稱
    string name;
    //價錢
    int price;
    //發售地點
    static string place;
     //取得價錢
    void getprice()
    {
        int p = price;
    }
}
被宣告static 的變數(place)或方法,不會讓物件(Bmw、Audi)各自擁有,而是類別(Car)所擁有,簡單來說"只要這個類別被載入,不用物件化便可以使用"。



被宣告static的成員,可以透過類別(Car)名稱( Car.place )取得,而非物件(Audi、Bmw)名稱取得( Audi.place )。
例如:
      System.out.println(Car.place);
要注意的是 :
  • 因為static 方法並非物件所擁有,而是類別,因此呼叫時並不會傳入參考位置,理所當然不能使用this、super或者隱含this、super。
  • static 方法不允許直接使用所屬類別的實體變量或方法(非static資料),因為實體的成員,必須與特定的物件關聯,簡單來說就是"static方法在任何物件中必須獨立存在,不能依靠物件",因此不允許使用所屬類別的實體變量或方法(非static資料)
public class Car
{
    //名稱
    string name;
    //價錢
    int price;
    //發售地點
    static string place;
     //取得價錢
    static int getprice()
    {
        return  this.price;
    }
}
public class Car
{
    //名稱
    string name;
    //價錢
    int price;
    //發售地點
    static string place;
     //取得價錢
    static int getprice()
    {
        return  price;
    }
}

留言