Java面向对象内存机制

Java内存分配介绍

1.方法区:放class文件的
2.栈内存:方法运行时所进入的内存,变量也在这里
3.堆内存:new出来的对象都在堆内存中
4.本地方法栈(暂不做说明)
5.寄存器(暂不做说明)

面向对象涉及的内存机制

1.定义一个类

public class Car {
    //成员变量
    String name;
    double price;
    //方法
    public void run() {
        System.out.println("价格为" + price + "万的" + name + "跑得很快");
    }
}

2.调用这个类

public class test1 {
    public static void main(String[] args) {
        Car c = new Car();
        c.price = 56.3;
        c.name = "某某品牌轿车";
        c.run();
    }
}

3.内存图展示
最初的内存
在这里插入图片描述

(1)运行test1.class,test1.class会被加载到方法区中,test1中有main方法,虚拟机会将main方法加载到栈内存中执行

public class test1 {
    public static void main(String[] args) {

在这里插入图片描述

(2)执行main方法的第一行代码,首先会涉及到Car类,于是Car类被加载到方法区中。c为引用型变量,放在栈内存中,并开辟一个空间,用来存放对象在堆内存中的地址。等号右边新建了一个对象,对象会被存放在堆内存中,堆内存会开辟一段空间代表Car的对象,空间里面会存放对象的属性,此时属性为默认值,并且放入成员方法的引用地址,因为成员方法的代码太多,放进去不方便。然后将对象在堆内存中的地址赋给c。

Car c = new Car();

在这里插入图片描述
(3)通过c中的地址在堆内存中找到对象,再把对象中的默认值修改

c.price = 56.3;
c.name = "某某品牌轿车";

在这里插入图片描述
(4)通过对象地址找到成员方法的引用地址从而找到run方法,把run方法提取到栈空间中运行。因为run()方法是c访问的,所以run()方法也只会访问c所指向的对象信息。

c.run();

在这里插入图片描述
(5)最终结果
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值