Android-Java-靜態變量與靜態方法內存圖


描述Dog對象:

package android.java.oop10;

public class Dog {

    public static String name;

    public static int age;

    public static void showNameAge() {
        System.out.println("name:" + name + " age:" + age);
    }

}

 

main測試方法:

package android.java.oop10;

public class Demo01 {

    public static void main(String[] args) {
        Dog.name = "阿白";
        Dog.age = 98;

        Dog.name = "李雙";
        Dog.age = 90;

        Dog.showNameAge();
    }

}

 

執行結果:

 

 以上案例對應內存圖:

 

 

1. 執行 java Demo01  是給JVM發送指令,和JVM說:把這個 Demo01.class 去執行;

2.JVM就去執行 Demo01.class 文件里面的字節碼,首先第一步 是把 Demo01.class字節碼加載進內存;

3.第二步把Demo01.class放入字節碼存放區;

4.第三步把Demo01里面的靜態數據(靜態變量 與 靜態方法)分配到 靜態區;

5.第四步main方法進棧,如何進棧的,是把靜態區里面的main方法拿到運行區(棧) 然后就進棧了;

6.第五步main方法執行 Demo. 的時候,就在此時 才把Dog.class加載進內存;

7.第六步把Dog.class放入字節碼存放區;

8.第七步把Dog里面的靜態數據(靜態變量 與 靜態方法)分配到 靜態區;

9第八步 在main方法中執行 Dog.name  是向靜態區去找到 Dog.name 拿來使用,由於是共享的 name 只保持最后修改的數據;

 


免責聲明!

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



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