首頁 > 軟體

Java深入講解static操作符

2022-07-14 14:04:27

前言

這篇文章主要是從類中static修飾的成員變數,static修飾的成員方法這兩個方面來講解static,static成員變數的初始化會在程式碼塊中講解

static修飾成員變數

在Java中,被static修飾的成員,稱之為靜態成員,也可以稱為類成員,其不屬於某個具體的物件,是所有物件所共用的。

舉個例子:

class Animal{
    String name;
    int age;
    static String type = "Dog";
    //構造方法
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void SetAnimal(){
        System.out.println(this.name+" "+this.age+" "+type);
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal("小白",1);
        Animal animal2 = new Animal("大黃",2);
        animal1.SetAnimal();
        animal2.SetAnimal();
    }
}

執行結果如下圖所以:

我定義了一個動物類,成員變數有名字和年齡,還有一個被static修飾的變數type(種類),以及一個構造方法。我在主函數中建立了兩個物件,物件的種類都是狗。並用構造方法為我建立的兩個變數進行賦值。而種類type是我實現在定義定義變數的時候就進行初始化的,這種初始化變數叫做就地初始化。

注意: s t a t i c 修 飾 的 成 員 變 量 不 是 一 定 要 就 地 初 始 化 color{#FF0000}{static修飾的成員變數不是一定要就地初始化} static修飾的成員變數不是一定要就地初始化

在我們用完static修飾完type之後,type就是靜態成員變數,靜態成員變數也叫類變數。沒被static修飾的成員變數叫做普通成員變數。靜態成員變數有個特點就是 不 屬 於 對 象 color{#FF0000}{不屬於物件} 不屬於物件。

什麼是不屬於物件?

也就是說static修飾過的變數,是不依賴物件的。舉個例子:

class Animal{
    String name;
    int age;
    static String type = "Dog";
    //構造方法
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void SetAnimal(){
        System.out.println(this.name+" "+this.age+" "+type);
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal("小白",1);
        Animal animal2 = new Animal("大黃",2);
        System.out.println(animal1.type);
        System.out.println(Animal.type);
    }
}

仍然是上面的程式碼,我們都知道 物件名.成員變數可以存取成員變數,而存取static修飾的成員變數不需要建立物件,可以直接通過 類名.靜態成員變數進行存取。執行結果結果如圖所示:

兩個列印的結果都是Dog,所以static修飾的變數不屬於物件,因為不需要建立物件也可以存取。如果大家是想存取static修飾的變數,建議大家就直接用類名.靜態成員變數就可以了,不建議使用物件.變數名進行存取。

靜態成員變數的特性

  • 不屬於某個具體的物件,是類的屬性,所有物件共用的,不儲存在某個物件的空間中
  • 既可以通過物件存取,也可以通過類名存取,但一般更推薦使用類名存取
  • 類變數儲存在方法區當中
  • 生命週期伴隨類的一生(即:隨類的載入而建立,隨類的解除安裝而銷燬)
  • 可以不初始化,如果就地初始化了如果沒被final修飾也是可以通過方法進行修改的

static修飾的成員方法

static修飾的成員方法和成員變數一樣 ,不屬於物件。static修飾的成員方法也叫類方法。也就是說,如果我想呼叫static修飾的成員方法直接用 類名.成員方法 就可以了。舉個例子:

class Animal{
    String name;
    int age;
    static String type = "Dog";
    public static void staticFunc(){
        System.out.println("static修飾的成員方法");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal("小白",1);
        Animal animal2 = new Animal("大黃",2);
        Animal.staticFunc();
    }
}

我們平時寫的方法一般都是static修飾的,為什麼要用static修飾我相信你的心裡應該也有答案了。

因為static修飾的方法不屬於物件,不需要建立物件就可以直接使用。你也可以把static修飾的成員方法看成我們平時寫的方法,只不過這是個在不同的類裡面定義的一個成員方法罷了。

static修飾的成員方法是不依賴於物件的方法,所以在static修飾的方法中,不能直接存取普通的成員變數,因為普通的成員方法是需要依賴物件的。如果不建立物件,直接在static中修飾的成員方法中存取普通成員變數是不可以的。如果想要在static中修飾的成員方法中存取成員變數,有兩種方法,第一種是直接在static修飾的成員方法中建立一個物件,這樣就可以存取了。第二種是把建立好的物件作為static修飾成員方法的形參,這樣也可以直接存取。

靜態方法特性

  • 不屬於某個具體的物件,是類方法
  • 可以通過物件呼叫,也可以通過類名.靜態方法名(…)方式呼叫,更推薦使用後者
  • 不能在靜態方法中存取任何非靜態成員變數

到此這篇關於Java深入講解static操作符的文章就介紹到這了,更多相關Java static內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com