首頁 >後端開發 >php教程 >php中static(靜態)關鍵字的特點與用法詳解

php中static(靜態)關鍵字的特點與用法詳解

黄舟
黄舟原創
2017-07-02 11:51:442418瀏覽

→靜態:static

用法:是一個修飾符,用於修飾成員(成員變量,成員函數

class Person
{
    String country = "cn";
}

/*每實例化一個Person對象,每個物件在堆記憶體中都有一個country

而加上static以後,就只在記憶體總存在一個靜態的country被其他的物件直接調用,可以節省記憶體空間。

當成員被靜態修飾以後,除了可以被物件呼叫外,還可以直接被類別名稱呼叫。 */

特有內容隨著物件儲存

例如person類,每個中國人都有自己的名字,而國籍都是一樣的中國,所以contry可以定義為static而name不用。

→static特點

1、隨著類別的載入而載入

也就是說:靜態會隨著類別的消失而消失,說明他的生命週期最長

2、優先於物件存在

3、被所有物件共享

4、可以直接被類別名稱呼叫

   

→int age(成員變數)實例變數與static int age(靜態成員變數)類別變數的差異

1、存放為著

實例變數是隨著物件的建立而存在堆記憶體中

類別變數隨著類別的載入而存在於方法區中

#2、生命週期

實例變數隨著對象的消失而消失

類別變數生命週期最長,隨著類別的消失而消失

→靜態使用注意事項

1、靜態方法只能存取靜態成員

2、靜態方法中不可以定義this,super關鍵字

因為靜態優先於物件存在,所以靜態方法中不可以出現this

#3、主函數是靜態的

→靜態的好處和壞處

好處:對物件的資料進行單獨空間的存儲,節省空間,沒有必要每個物件中的存儲一份

          可以直接被類別名稱呼叫(Person.country)

壞處:生命週期過長。

          存取出現限制。 (只能存取靜態)

→什麼時候使用靜態呢?

要從兩個面向入手

因為靜態修飾的內容有成員變數和成員方法(函數)

什麼時候定義靜態變數(類別變數)呢?

當物件中出現共享資料時,該資料會被靜態所修飾

物件中的特有資料要定義成非靜態存在於堆記憶體中。

什麼時候定義靜態函數呢?

當功能內部沒有存取到非靜態資料(物件的特有資料),那麼該功能可以定義為靜態的。

→靜態的應用

每一個應用程式都有共通性的功能

可以將這些功能進行抽取,並獨立封裝

以便複用。

把成員方法都定義成static的直接用類別名稱呼叫。

一個類別中會有一個預設的建構子,這個建構子的權限和所屬的類別一致

靜態程式碼區塊

格式:

static

{

    靜態程式碼區塊中的執行語句;

}

//特點:隨著類別的載入而執行,只執行一次。用於給類別進行初始化。

如下範例:

class StaticCode
{
    static 
    {
        System,out.println("a");
    }
}

載入順序靜態程式碼區塊-->建構程式碼區塊-->建構子

物件的初始化過程

Person p = new Person("zhangsan",20);

1、因為new用到了Person.class。所以會先找到Person.class檔並載入到記憶體中。

2、執行該類別中的static程式碼區塊(靜態程式碼區塊),如果有的話,給Person.class類別進行初始化

3、在堆記憶體中開闢空間,非配記憶體位址

4、在堆記憶體中建立物件的特有屬性,並進行預設初始化

5、對屬性進行顯示初始化

6.對物件進行建構程式碼區塊初始化

7、對物件進行對應的建構子初始化

#8、將記憶體位址付給堆疊記憶體中的p變數

以上是php中static(靜態)關鍵字的特點與用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn