Android-Java-靜態成員變量&成員變量&局部變量(內存圖&回收機制)


靜態成員變量(回收機制)

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();

    }

}

 

執行結果:

 

以上案例對應的內存圖:

 

回收機制:

   局部變量:局部變量的回收機制 生命周期 現對於 靜態成員變量/成員變量/ 來說是最短的;

   因為 方法一旦彈棧/出棧 此局部變量就會被回收了;

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM