靜態成員變量(回收機制)
StaticDemo 和 MyDemo
package android.java.oop13; class MyDemo { /** * 定義一個靜態變量 */ public static String country = "中國"; } public class StaticDemo { public static void main(String[] args) { /** * 能夠使用 類名.靜態成員變量,是因為靜態成員變量是存放在(方法區(數據共享區) 的 靜態區中) * 屬於共享數據,不需要實例化對象,直接拿類名訪問靜態成員變量即可 */ System.out.println("country:" + MyDemo.country); } }
執行結果:
對應以上案例的內存圖:
回收機制:
靜態成員變量的回收機制是:隨着類的加載而加載,隨着類的消失而消失,由於類需要非常長時間的不使用,不利用,不關聯,才有可能會被回收機制回收,
所以靜態成員變量的生命周期特別長,除非是共享數據,否則不建議使用靜態;
成員變量:
Demo 與 DemoTest
package android.java.oop13; class Demo { /** * 定義一個普通成員變量name */ public String name; // 定義此方法就是為了打印name public void showName() { System.out.println(this.name); } } public class DemoTest { public static void main(String[] args) { Demo demo = new Demo(); demo.name = "許文強"; demo.showName(); } }
執行結果:
以上案例對應內存圖:
回收機制:
成員變量:是隨着對象的實例化而存在,隨着對象的回收而消亡,所以比靜態成員變量生命周期要短一些,建議非共享數據,定義成 成員變量;
局部變量:
Demo 與 DemoTest:
package android.java.oop13; class Demo { public void showName() { /** * 定義局部變量 */ String name = "謝曉峰"; System.out.println(name); } } public class DemoTest2 { public static void main(String[] args) { Demo demo = new Demo(); demo.showName(); } }
執行結果:
以上案例對應的內存圖:
回收機制:
局部變量:局部變量的回收機制 生命周期 現對於 靜態成員變量/成員變量/ 來說是最短的;
因為 方法一旦彈棧/出棧 此局部變量就會被回收了;