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

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

packageAndroid.java.oop12;

// 描述 Student 对象实体

publicclassStudent{

privateStringname;

privateintage;

protectedstaticStringcountry="CN";

privateStudent(){}

publicStudent(Stringname,intage){

/**

* 通过拿到对象引用的地址(9998#==this), 去操作 堆区内存的 name 属性 age 属性

*/

this.name=name;

this.age=age;

}

publicvoidshowValue(){

/**

* 通过拿到对象引用的地址(9998#==this), 去操作 堆区内存的 name 属性 age 属性

*/

System.out.println("name:"+this.name+"age:"+age);

}

publicstaticvoidprintlnCountry(){

/**

* 通过类名就可用拿到 ---> 方法区(共享数据区) --> 中的 静态区 里面的 --> 静态数据 , 都是共享的

*/

System.out.println("country:"+Student.country);

System.out.println("country:"+country);

}

}

main 测试方法:packageAndroid.java.oop12;

publicclassTestDemo{

publicstaticvoidmain(String[]args){

/**

* 实例化 Student 对象 new Student("张三", 89);

* 拿到实例化对象引用的地址 Student student == 9998#

*/

Studentstudent=newStudent("张三",89);

/**

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

*/

student.showValue();

/**

* 直接调用 静态区 共享的 printlnCountry() 方法

*/

Student.printlnCountry();

}

}

执行结果:

ab7653affab982b574eb7acc55df2e04.gif

以上案例对应的内存图:

ab7653affab982b574eb7acc55df2e04.gif

1. 执行 java TestDemo

ab7653affab982b574eb7acc55df2e04.gif

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

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

ab7653affab982b574eb7acc55df2e04.gif

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

ab7653affab982b574eb7acc55df2e04.gif

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

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

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

ab7653affab982b574eb7acc55df2e04.gif

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

ab7653affab982b574eb7acc55df2e04.gif

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

ab7653affab982b574eb7acc55df2e04.gif

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

ab7653affab982b574eb7acc55df2e04.gif

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

ab7653affab982b574eb7acc55df2e04.gif

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

ab7653affab982b574eb7acc55df2e04.gif

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

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

ab7653affab982b574eb7acc55df2e04.gif

14. 第十五步:

ab7653affab982b574eb7acc55df2e04.gif

;

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

ab7653affab982b574eb7acc55df2e04.gif

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

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

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

来源: http://www.bubuko.com/infodetail-2944817.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值