好程序員Java分享成員變量和局部變量

好程序員Java分享成員變量和局部變量,成員變量:在類範圍裏定義的變量。成員變量又分爲實例屬性(不用static修飾)和類屬性(用static修飾)。類屬性和實例屬性統稱爲成員變量。


  類屬性在類的準備階段開始存在,直到系統銷燬這個類,類屬性與類的生存範圍相同。實例屬性從類的實例被創建開始存在,直到系統銷燬這個實例,實例屬性與對應實例生存範圍相同。


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


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


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


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


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


1、增大了變量的生存時間,將導致更大的系統開銷;


2、擴大了變量的作用域,不利於提高程序的內聚性。


  以下情形,應該考慮使用成員變量:


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


2、在類中,需要定義一個變量來保存該類或者實例運行時的狀態信息,這種用於保存某個類,或者某個實例狀態信息的變量通常應該定義爲成員變量。


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


  即使在程序中使用局部變量,也應該儘可能地縮小局部變量的作用範圍,局部變量的作用範圍越小,它在內存裏停留的時間就越短,程序運行性能越好。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章