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

Java—成員變量和局部變量

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

分享到:
在線咨詢 我要報名
和我們在線交談!