黑馬程式設計師 static靜態

2021-06-23 04:53:14 字數 2256 閱讀 1668

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

static關鍵字

由同乙個類建立的所有物件共享,在記憶體中只載入一次

靜態修飾的成分儲存在方法區或者共享區或者資料區

盡量少設定過多的靜態,會占用太多的空間

隨著類的載入而載入,也就是說類載入一次,static修飾的成員也只載入一次

類存在則靜態存在,類消失則靜態消失

優先於物件存在,也就是說靜態先存在,然後物件才存在

被所有由同乙個類所建立的所有物件共享

可以直接被類名所呼叫,也就是說不需要通過建立物件再由物件呼叫,而是直接:類名.靜態成員

例項變數和類變數(靜態變數)的區別:

存放位置

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

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

生命週期

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

例項變數生命週期隨著物件的消失而消失

靜態使用注意事項:

靜態方法只能訪問靜態成員

非靜態方法可以訪問靜態成員

靜態方法中不可以定義this(),

super()

靜態方法中不可以出現「this.*」

靜態有利有弊:

有利:對物件的共享資料進行單獨空間的儲存,沒有必要每乙個物件中都儲存乙份,節省空間

可以直接被類名呼叫

弊端:生命週期過長

訪問出現侷限性(靜態雖好,只能訪問靜態)

什麼時候使用靜態?

當物件出現共同共享資料時,比如:同乙個國家的人的國籍

而物件中的特有資料(物件自定義的)要定義成非靜態存在與堆記憶體中

什麼時候定義靜態函式?

當功能內部沒有訪問到非靜態資料(物件的特有資料)

靜態的應用

例如:程式設計師自己開發的一些工具類,然後靜態呼叫

//寫乙個工具類

class arraytool

public static int getmax(int arr)

return arr[max];

}}

用main函式呼叫

class demo

; //呼叫靜態方法

arraytool.getmax(arr);

}}

靜態**塊:

格式:

static

特點:

隨著類的載入而執行,只執行一次,即使呼叫兩次含有靜態**塊的類也只會執行第一次,而第二次不執行

優先於主函式

構造**塊:

物件一建立就執行,但是優先於建構函式

每次例項化物件不管是有參的還是無參的都得執行,這樣就

提高了**的的重用性

class test

test(){}//無參建構函式

test(int i){}//有參建構函式 }

類初始化的時候會執行到的**塊

static

建構函式初始化**塊,也就是建立物件的時候會執行到的**塊

因此靜態**塊裡面不能引用非靜態成員,

靜態**塊和靜態函式被載入的時候根本找不到引用的非靜態成員,會發生空引用異常

物件初始化過程

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

2、執行該類中的static**塊,如果有的話,給person.class類進行初始化

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

4、在堆記憶體中建立物件的特有屬性,並進行預設初始化(非靜態成員)

5、對屬性進行顯示初始化(賦值)

6、對物件進行構造**塊初始化

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

8、將記憶體位址賦值給棧記憶體中的***變數

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------詳細請檢視:www.itheima.com

黑馬程式設計師 static

asp.net android io開發s net培訓 期待與您交流!靜態static 是乙個修飾符,可以修飾成員變數,成員函式 只能是成員 從堆記憶體拿出 來放在方法區。被他所修飾的 是共性變數。人有國籍,國籍就是共性 成員被靜態修飾以後,除了能被物件呼叫外,還能被類名呼叫。寫法 類名.靜態成員 ...

黑馬程式設計師 static靜態關鍵字

靜態關鍵字用於修飾成員。被修飾的成員具備以下特點 1.隨著類的載入而載入。2.優先於物件。3.被所以物件所共享。4.可以直接被類名呼叫。使用注意點 1.靜態方法只能訪問靜態成員。非靜態方法即可以訪問靜態頁可以訪問非靜態。2.靜態方法中不可以寫this,super關鍵字。3.主函式是靜態的。靜態的利與...

黑馬程式設計師 靜態方法和靜態類

靜態方法 靜態 例項 非靜態 static關鍵字 不需要static關鍵字 使用類名呼叫 使用例項物件呼叫 在靜態方法中可以訪問靜態成員 在例項方法中 可以直接訪問靜態成員 在靜態方法中,不可以直接訪問例項成員,需要建立物件,通過物件呼叫 在例項方法中,可以直接訪問例項成員 呼叫前初始化 例項化物件...