java面向对象执行代码过程中的内存分配情况

执行代码过程中的内存分配情况(简单化)

以下面这个代码为例

class Car{
       String color = "red";
       int num = 4;
       void show(){
			  int a = 10;
	          System.out.println("color="+color+",num="+num);
        }
  }
class CarTest {
	public static void main(String[] args) {
		Car c1 = new Car();   
	Car c2 = new Car(); 
		c1.color = "blue";  
		c1.show();   
		c2.show();
	} 
 }
  1. 首先我们要知道。在面向对象过程中,声明的声明变量存储在栈空间中。new出来的对象存储与堆空间中。如上面代码中,c1存储在栈中,对象存储在堆中。栈中存储了一个地址值与堆之间通过地址值连接,通过栈空间的地址值就能找到堆空间的对象。在这里插入图片描述

  2. 堆空间中存储着类的属性,属性最初都是默认初始值。String类型为null,int类型为0。
    在这里插入图片描述

  3. 根据赋值情况,对堆空间中的变量进行赋值
    在这里插入图片描述

  4. 同样地c2也是上面这种说明
    在这里插入图片描述

  5. 在调用c1之前,出现了一次赋值情况,把color改成red
    在这里插入图片描述

  6. 然后调用c1的show方法,里面的局部变量a存储在栈空间中值为10
    在这里插入图片描述

  7. 用c1调用show,栈中的局部变量a就出栈也就是被销毁。 输出对象时,哪个对象调的方法那么输出时,color,num就是谁的值 。输出结果为color=blue,num=4;
    在这里插入图片描述

  8. 然后通过c2调用show,栈中又会出现变量a,然后调用c2,输出color与num的值 ,第二次的变量a也出栈
    在这里插入图片描述

  9. 调用完后,main方法也就结束了栈与堆的链接也随之结束 ,c1与c2也相继结束弹出,指针也随之消失,堆空间中的结构也就被回收
    在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值