首頁技術(shù)文章正文

Java—成員變量和局部變量

更新時(shí)間:2018-07-25 來源:黑馬程序員JavaEE培訓(xùn)學(xué)院 瀏覽量:

 

成員變量:在類范圍里定義的變量。成員變量又分為實(shí)例屬性(不用static修飾)和類屬性(用static修飾)。類屬性和實(shí)例屬性統(tǒng)稱為成員變量。

類屬性在類的準(zhǔn)備階段開始存在,直到系統(tǒng)銷毀這個(gè)類,類屬性與類的生存范圍相同。實(shí)例屬性從類的實(shí)例被創(chuàng)建開始存在,直到系統(tǒng)銷毀這個(gè)實(shí)例,實(shí)例屬性與對(duì)應(yīng)實(shí)例生存范圍相同。

成員變量無須顯式初始化,只要定義了類屬性和實(shí)例屬性,則系統(tǒng)會(huì)在這個(gè)類的準(zhǔn)備階段或創(chuàng)建類的實(shí)例時(shí)進(jìn)行默認(rèn)初始化。實(shí)例也可訪問類屬性,同一個(gè)類的多個(gè)實(shí)例訪問類屬性時(shí),實(shí)際上訪問的是同一個(gè)類屬性,訪問的都是該類的屬性。

局部變量:在方法內(nèi)定義的變量。局部變量分為形參(方法簽名中定義的變量)、方法局部變量(在方法內(nèi)定義的變量)和代碼塊局部變量(在代碼塊中定義的變量)。

形參作用域在整個(gè)方法內(nèi)有效。方法局部變量在方法體內(nèi)的定義的地方開始有效,到方法結(jié)束時(shí)失效。代碼塊局部變量,從定義該變量的地方生效,到該代碼塊結(jié)束時(shí)失效。

局部變量除形參外,都必須顯式初始化(指定初始值)之后才能訪問,否則將出錯(cuò)。(形參的初始化在調(diào)用該方法時(shí)由系統(tǒng)完成)

不能無限制的定義成員變量。當(dāng)定義一個(gè)成員變量是,成員變量將被放置到堆內(nèi)存中去,成員變量的范圍將擴(kuò)大到類存在范圍或者對(duì)象存在范圍,這種范圍的擴(kuò)大有兩個(gè)害處:

1、增大了變量的生存時(shí)間,將導(dǎo)致更大的系統(tǒng)開銷;

2、擴(kuò)大了變量的作用域,不利于提高程序的內(nèi)聚性。

以下情形,應(yīng)該考慮使用成員變量:

1、需要定義的變量用于描述某個(gè)類或某個(gè)對(duì)象的固有信息,這種變量應(yīng)定義為成員變量。如果這種信息對(duì)這個(gè)類的所有實(shí)例完全相同,或者說它是類相關(guān)的即類的屬性性質(zhì)變,該類的所有實(shí)例的性質(zhì)也同樣改變,這種類相關(guān)的信息應(yīng)該定義為類屬性(static修飾);如果這種信息是實(shí)例相關(guān)的,即不同的實(shí)例,實(shí)例的信息可能不同,這種實(shí)例相關(guān)的信息應(yīng)該定義成實(shí)例屬性(不用static修飾)。

2、在類中,需要定義一個(gè)變量來保存該類或者實(shí)例運(yùn)行時(shí)的狀態(tài)信息,這種用于保存某個(gè)類,或者某個(gè)實(shí)例狀態(tài)信息的變量通常應(yīng)該定義為成員變量。

3、如果某個(gè)信息需要在某個(gè)類的多個(gè)方法之間進(jìn)行共享,則這個(gè)信息應(yīng)該用成員變量來保存。

即使在程序中使用局部變量,也應(yīng)該盡可能地縮小局部變量的作用范圍,局部變量的作用范圍越小,它在內(nèi)存里停留的時(shí)間就越短,程序運(yùn)行性能越好。

本文版權(quán)歸黑馬程序員JavaEE學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

作者:黑馬程序員JavaEE培訓(xùn)學(xué)院

首發(fā):http://java.itheima.com/

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!