java基础--06对象内存图

1个对象的内存图

这里写图片描述

图中包含栈内存、堆内存和方法区

方法区中包含class文件内容,分成两块,一块是PhoneDemo.class另一块是Phone.class

其中Phone.class中包含成员变量和成员方法
PhoneDemo.class中包含一个main方法

1.加载main方法到栈内存中

2.Phone p = new Phone();

在栈内存中创建一个Phone类型的引用对象 p ;
在堆内存中创建一个Phone对象,同时在堆内存中创建Phone对象的成员变量:brand(默认null),price(默认0),color(默认null)
让引用对象p指向Phone对象(引用对象p持有了堆内存中Phone对象的一个地址值)

注:方法区中,Phone.class的方法在堆内存中Phone对象中也持有这些方法的引用,以便于在执行Phone对象的方法的时候快速定位并执行

3.System.out.println(p.brand+” “+p.price+” “+p.color);
打印对象的初始化值:null 0 null

4.p.brand=”三星”
p.price=3999
p.color=”白色”

给堆内存中Phone对象进行赋值,赋值之后该对象的成员变量变成了:brand:”三星”,price:3999,color:”白色”

5.System.out.println(p.brand+” “+p.price+” “+p.color);

打印:”三星” 3999 “白色”

6.p.call(“乔布斯”)
首先在方法区中找到call方法,然后加载到栈内存中,执行call()方法,执行完毕之后,从栈内存空间中消失
p.sendMessage()、p.playGame() 方法同上,也是先加载到栈内存,执行完毕之后从栈内存中消失

2个对象的内存图

这里写图片描述

这里牵涉到方法的共用

在堆内存中new出的两个对象在调用方法的时候,因为方法的内容是不变的,所以两个对象调用的方法也是相同的,由堆内存指向方法区的方法引用来间接调用Phone类的方法

3个对象的内存图

这里写图片描述

其中有两个引用指向同一个对象

就是p3所引用的对象和p1引用的对象在堆内存中是同一个对象
通过p3改变成员变量的值,也就等同于使用p1改变了这个对象成员变量的值

posted @ 2016-07-27 22:22  时光.漫步  阅读(111)  评论(0编辑  收藏  举报