java類的成員變量有兩種:一種是被static關鍵字修飾的變量,叫類變量或者靜態變量;另一種沒有static修飾,為實例變量。
在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區別:實例變量屬于某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。總之,實例變量必須創建對象后才可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。
從生存周期講,實例變量的生存周期從執行new運算后創建對象開始存在,直到Java垃圾回收器銷毀這個對象結束,實例變量的生存周期與對象的生存周期一致;類變量的生存期從定義類開始存在,直到該類所在的程序停止執行為止,很明顯類變量的生存周期要大于實例變量的生存周期。
成員變量和局部變量的區別:
作用域:成員變量的作用域比局部變量作用域大;
變量的初始值:成員變量可以顯式地賦值,也可以取該成員變量數據類型的默認值。但局部變量必須顯式地賦值,如果一個變量未顯式地賦值,那么程序將無法訪問該變量;
存儲位置:成員變量中的實例變量存儲在堆內存中,結束時需要垃圾回收器回收空間,局部變量和類變量是存儲在棧內存中的,無須垃圾回收器回收,隨著程序塊運行結束而結束。
變量使用注意:
- 在程序中能用局部變量實現的盡量不用成員變量實現,盡可能的減小變量的生存期,以節省內存開銷;
- 針對局部變量而言,在不影響功能的情形下,要盡可能的縮小變量的作用域。