Java基础.Day12

创建对象内存分析

Java对象是如何new出来的??

IDEA中创建了一个Pet类,在main方法中new了一个对象旺财

Java基础.Day12

  • 首先加载Application这个类

这个类里面有main方法,常量池:旺财

Java基础.Day12

  • 执行main方法,在栈里面

Java基础.Day12

  • 第一步new了一个Pet(),加载Pet类

里面有自己的属性,name,age,方法shout()

当前name=null,age=0

Java基础.Day12

  • 通过模板生成一个具体的对象dog

dog放在栈里,只是一个引用变量名,真正的dog在堆里面

dog指向Pet,地址叫0001

默认name=null,age=0,方法shout()

Java基础.Day12

这个shout()方法new的时候调用了下面这个方法

Java基础.Day12

  • 开始给dog.name赋值为旺财

Java基础.Day12

  • 同理赋值age,调用shout()

Java基础.Day12

  • 所有值赋完了之后存在堆中,就可以使用了

  • 现在再在main中new一个cat

Java基础.Day12

其实是在栈中又加了一个引用变量名,指向堆中真实的cat

Java基础.Day12

所以

引用变量:本身在栈里面是个引用变量名,真正指向的是堆中具体的对象

  • 静态方法区

和类一起加载,好处就是,所有的对象都可以用到它

Java基础.Day12

  • 整体结构

左边是栈,右边是堆,堆里面有个特殊的区域叫方法区

Java基础.Day12

类和对象总结

Java基础.Day12

 来源:b站狂神

上一篇:day12 Python字典


下一篇:Java_Day12(中)