黑馬程序員_學習記錄06:靜態以及單例設計模式

 ------- android培訓java培訓、期待與您交流! ----------

一、Static關鍵字

靜態:static

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

當成員被靜態修飾後,就多了一個調用方式,除了可以被對象調用外,可以直接被類名調用。類名.靜態成員。

特點:隨着類的加載而執行,只執行一次,並優先於主函數。用於給類進行初始化的。

static特點:

1,隨着類的加載而加載。也就說:靜態會隨着類的消失而消失。說明它的生命週期最長。

2,優先於的對象存在    明確一點:靜態是先存在。對象是後存在的。

3,被所有對象所共享

4,可以直接被類名所調用。

實例變量和類變量的區別:

1,存放位置。

類變量隨着類的加載而存在於方法區中。

實例變量隨着對象的建立而存在於堆內存中。

2,生命週期:

類變量生命週期最長,隨着類的消失而消失。

實例變量生命週期隨着對象的消失而消失。

 

靜態代碼塊。

格式:

static

{

靜態代碼塊中的執行語句。

}

靜態使用注意事項:

1,靜態方法只能訪問靜態成員。

非靜態方法既可以訪問靜態也可以訪問非靜態。

2,靜態方法中不可以定義thissuper關鍵字。

因爲靜態優先於對象存在。所以靜態方法中不可以出現this

3,主函數是靜態的。

靜態有利有弊

利處:對對象的共享數據進行單獨空間的存儲,節省空間。沒有必要每一個對象中都存儲一份。可以直接被類名調用。

弊端:生命週期過長。訪問出現侷限性。(靜態雖好,只能訪問靜態。

 

什麼使用靜態?

要從兩方面下手:

因爲靜態修飾的內容有成員變量和函數。

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

當對象中出現共享數據時,該數據被靜態所修飾。對象中的特有數據要定義成非靜態存在於堆內存中。

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

當功能內部沒有訪問到肺靜態數據(對象的特有數據)那麼該功能可以定義成靜態的

靜態的應用:每一個應用程序中都有共性的功能,可以將這些功能進行抽取,獨立封裝。以便複用。

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

該句話都做了什麼事情?

1,因爲new用到了Person.class.所以會先找到Person.class文件並加載到內存中。

2,執行該類中的static代碼塊,如果有的話,給Person.class類進行初始化。

3,在堆內存中開闢空間,分配內存地址。

4,在堆內存中建立對象的特有屬性。並進行默認初始化。

5,對屬性進行顯示初始化。

6,對對象進行構造代碼塊初始化。

7,對對象進行對應的構造函數初始化。

8,將內存地址付給棧內存中的p變量。

設計模式

單一對象的設計模式

1、是先初始化對象。

稱爲:餓漢式。

Single類一進內存,就已經創建好了對象。

class Single

{

private static Single s = new Single();

private Single(){}

public static Single getInstance()

{

return s;

}

}

2、對象是方法被調用時,才初始化,也叫做對象的延時加載。稱爲:懶漢式。

Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象。

class Single

{

private static Single s = null;

private Single(){}

public static Single getInstance()

{

if(s==null)

{

synchronized(Single.class)

{

if(s==null)

s = new Single();

}

}

return s;

}

}

//記錄原則:定義單例,建議使用餓漢式。

class  

{

public static void main(String[] args) 

{

System.out.println("Hello World!");

}

}

------- android培訓java培訓、期待與您交流! ----------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章