更新時間:2020-05-27 16:23:34 來源:動力節(jié)點 瀏覽2200次
由static修飾的變量稱為靜態(tài)變量,其實質(zhì)上就是一個全局變量。如果某個內(nèi)容是被所有對象所共享,那么該內(nèi)容就應(yīng)該用靜態(tài)修飾;沒有被靜態(tài)修飾的內(nèi)容,其實是屬于對象的特殊描述。
不同的對象的實例變量將被分配不同的內(nèi)存空間,如果類中的成員變量有類變量,那么所有對象的這個類變量都分配給相同的一處內(nèi)存,改變其中一個對象的這個類變量會影響其他對象的這個類變量,也就是說對象共享類變量。
1.兩個變量的生命周期不同
2.調(diào)用方式不同
3.別名不同
4.數(shù)據(jù)存儲位置不同
特點:
弊端:
1.有些數(shù)據(jù)是對象特有的數(shù)據(jù),是不可以被靜態(tài)修飾的。因為那樣的話,特有數(shù)據(jù)會變成對象的共享數(shù)據(jù)。這樣對事物的描述就出了問題。所以,在定義靜態(tài)時,必須要明確,這個數(shù)據(jù)是否是被對象所共享的。
2.靜態(tài)方法只能訪問靜態(tài)成員,不可以訪問非靜態(tài)成員。
因為靜態(tài)方法加載時,優(yōu)先于對象存在,所以沒有辦法訪問對象中的成員。
3.靜態(tài)方法中不能使用this,super關(guān)鍵字。
因為this代表對象,而靜態(tài)在時,有可能沒有對象,所以this無法使用。
什么時候定義靜態(tài)成員呢?或者說:定義成員時,到底需不需要被靜態(tài)修飾呢?
成員分兩種:
1.成員變量。(數(shù)據(jù)共享時靜態(tài)化)
該成員變量的數(shù)據(jù)是否是所有對象都一樣:
如果是,那么該變量需要被靜態(tài)修飾,因為是共享的數(shù)據(jù)。
如果不是,那么就說這是對象的特有數(shù)據(jù),要存儲到對象中。
2.成員函數(shù)。(方法中沒有調(diào)用特有數(shù)據(jù)時就定義成靜態(tài))
如果判斷成員函數(shù)是否需要被靜態(tài)修飾呢?
只要參考,該函數(shù)內(nèi)是否訪問了對象中的特有數(shù)據(jù):
如果有訪問特有數(shù)據(jù),那方法不能被靜態(tài)修飾。
如果沒有訪問過特有數(shù)據(jù),那么這個方法需要被靜態(tài)修飾。
1.成員變量所屬于對象。所以也稱為實例變量。
2.成員變量存在于堆內(nèi)存中。
3.成員變量隨著對象創(chuàng)建而存在。隨著對象被回收而消失。
4.成員變量只能被對象所調(diào)用。
以上就是動力節(jié)點java培訓機構(gòu)的小編針對“Java編程語言,Java成員變量與類變量的區(qū)別”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。