天天看點

靜态成員和非靜态成員的差別

被static修飾的變量是一種被對象所共享的資料,其不僅可以被對象調用,也可以被類名調用

static 的特點:

1.static是一個修飾符,用于修飾成員

2.static修飾的成員被所有的對象共享

3.static優先于對象存在,因為static的成員鎖着類的加載就已經存在了

4.static修飾的成員多了一種調用方式,即:類名.靜态成員

5.static修飾的資料是共享資料,對象中存儲的是特有資料

成員變量與靜态變量的差別:

1.兩個變量的聲明周期不同

成員變量随着對象的建立而存在,随着對象被回收而釋放

靜态變量随着類的加載而存在,随着類的消失而消失

2.調用方式不同

成員變量隻能被對象調用

靜态變量可以被對象調用,還可以被類名調用

3.别名不同

成員變量頁稱執行個體變量

靜态變量稱為類變量

4.存儲位置不同

成員變量資料存儲載對記憶體的對象中,是以也叫對象的特有資料

靜态變量資料存儲在方法區(也叫資料區,是用來存儲方法的區域)的靜态區中,是以它也叫對象的共享資料;

靜态使用的注意事項

1.靜态方法隻能通路靜态成員,非靜态既可以通路靜态,又可以通路非靜态

2.靜态方法中不能使用this或者super關鍵字

3.主函數是靜态的;

什麼時候使用靜态static?

1.靜态變量

當分析對象中所具備的成員變量的值都是相同的時候,這個成員就可以備靜态修飾,

而隻要資料載對象中都是不同的,就是對象的特有資料,必須存儲載對象中,是非靜态的,

如果是相同的資料,對象不需要做修改,隻要使用即可,不需要存儲載對象中,定義成靜态的

2.靜态函數

函數是否用靜态修飾,就參考一點,即是該函數功能是否有通路到對象中的特有資料,簡單點說,從源代碼看,該功能是否需要通路非靜态成員變量

,如果需要,該功能是非靜态的,如果不需要,就可以将該功能定義成靜态的(對象是用來封裝特有資料的,如果方法沒有通路特有資料,不需要建立對象)

當然,也可以定義成非靜态,但是非靜态需要被對象調用,而僅建立對象調用非靜态的沒有通路特有資料的方法,該對象的建立是沒有意義的。

繼續閱讀