一、Static關鍵字
靜態:static。
用法:是一個修飾符,用於修飾成員(成員變量,成員函數).
當成員被靜態修飾後,就多了一個調用方式,除了可以被對象調用外,可以直接被類名調用。類名.靜態成員。
特點:隨着類的加載而執行,只執行一次,並優先於主函數。用於給類進行初始化的。
static特點:
1,隨着類的加載而加載。也就說:靜態會隨着類的消失而消失。說明它的生命週期最長。
2,優先於的對象存在 明確一點:靜態是先存在。對象是後存在的。
3,被所有對象所共享
4,可以直接被類名所調用。
實例變量和類變量的區別:
1,存放位置。
類變量隨着類的加載而存在於方法區中。
實例變量隨着對象的建立而存在於堆內存中。
2,生命週期:
類變量生命週期最長,隨着類的消失而消失。
實例變量生命週期隨着對象的消失而消失。
靜態代碼塊。
格式:
static
{
靜態代碼塊中的執行語句。
}
靜態使用注意事項:
1,靜態方法只能訪問靜態成員。
非靜態方法既可以訪問靜態也可以訪問非靜態。
2,靜態方法中不可以定義this,super關鍵字。
因爲靜態優先於對象存在。所以靜態方法中不可以出現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培訓、期待與您交流! ----------