ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Android-Java-静态变量与静态方法&普通变量与普通方法(内存图 完整版)

2019-02-04 15:47:28  阅读:290  来源: 互联网

标签:showValue 静态方法 变量 age TestDemo 内存 Student 完整版 name


描述Student对象:

package android.java.oop12;

// 描述Student对象实体
public class Student {

    private String name;

    private int age;

    protected static String country = "CN";

    private Student() {}

    public Student(String name, int age) {
        /**
         * 通过拿到对象引用的地址(9998#==this),去操作 堆区内存的 name属性  age属性
         */
        this.name = name;
        this.age = age;
    }

    public void showValue() {
        /**
         * 通过拿到对象引用的地址(9998#==this),去操作 堆区内存的 name属性  age属性
         */
        System.out.println("name:" + this.name + " age:" + age);
    }

    public static void printlnCountry() {
        /**
         * 通过类名就可用拿到 ---> 方法区(共享数据区) --> 中的 静态区 里面的 --> 静态数据 ,都是共享的
         */
        System.out.println("country:" + Student.country);
        System.out.println("country:" + country);
    }

}

 

main测试方法:

package android.java.oop12;

public class TestDemo {

    public static void main(String[] args) {

        /**
         * 实例化Student对象         new Student("张三", 89);
         * 拿到实例化对象引用的地址    Student student == 9998#
         */
        Student student = new Student("张三", 89);

        /**
         * 通过拿到对象引用的地址(9998#==this),去调用showValue()方法
         */
        student.showValue();

        /**
         * 直接调用 静态区 共享的 printlnCountry() 方法
         */
        Student.printlnCountry();
    }

}

 

执行结果:

 

 

以上案例对应的内存图:

 

 

1. 执行 java TestDemo   是给JVM发送指令,和JVM说:把这个 TestDemo.class 去执行;

 

2.JVM就去执行 TestDemo.class 文件里面的字节码,首先第一步 是把 TestDemo.class字节码加载进内存;

 

3.第二步,会把TestDemo 静态数据 分配到 静态区里面去;

 

4.第三步,main方法进栈,是直接把静态区里面的 TestDemo --> main 方法拿过来进栈运行;

 

5.第四步,new Student("张三", 89);

 

6.第五步,注意:非常重要的点 要记住 ,那就是在 new Student("张三", 89); 的时候才把,Student.class加载进内存中的---> 存放区;

 

7.第六步,分配Student静态数据到--->静态区;

 

8.第七步,在堆内存中开辟 Student对象空间,并分配对象地址,并给变量赋初始值 null 0 等;

 

9.第八步:构造方法Student(name, age) 进栈, 第九步:构造方法Student(name, age)弹栈;

 

10.第十步,在堆内存中,name age 属性 被赋值完毕;

 

11.第十一步,new Student(name, age); 后 得到一个对象引用地址 给student变量;

 

12.第十二步,调用 student.showValue();

 

13.第十三步:showValue()方法进栈, 并通过this去操作name、age属性,  第十四步:showValue()方法弹栈;

 

14.第十五步:;

 

15.第十六步:printlnCountry()方法进栈,并直接去访问 共享的 country 变量,  第十七步:printlnCountry()方法弹栈;

 

16.第十八步:main方法执行完毕,弹栈;

 

17.第十九步:等待 JVM GC 机制来回收 Student对象; 

 

标签:showValue,静态方法,变量,age,TestDemo,内存,Student,完整版,name
来源: https://www.cnblogs.com/android-deli/p/10351793.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有