创建对象的内存分析

1、类和对象

类:具有相同特征(数据元素)和行为(功能)的对象的抽象。是描述一组具有共同属性和行为对象的基本模板。是对具有相同属性和相同方法的对象的定义。

对象:是世界中的实体,是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

比如说动物,动物就是一个类,而具体的某个动物(猫,狗…)就是动物这个类的对象,像名字,年龄,这些就是对象的属性,吃饭,睡觉,这些就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。

面向对象的本质:以类的方式组织代码,以对象的形式封装数据。


2、对象在内存中的创建

  1. 定义宠物类
public class Pet {
    //属性
    public String name;
    public int age;
	//方法
    public void speak(){
        System.out.println("叫了一下");
    }
}

  1. 创建对象
public class Demo02 {
    public static void main(String[] args) {
        //创建对象
        Pet dog = new Pet();
        //给成员属性赋值
        dog.name = "旺财";
        dog.age = 3;
        //调用成员方法
        dog.speak();
		
        System.out.println(dog.name);
        System.out.println(dog.age);

    }
}

那么在进行这两步时,内存中是如何变化的呢?

在这里插入图片描述

这里"旺财"是常量,而3只是一个int类型的数据,因为"旺财"是字符串,String默认就是final修饰,也就是常量。

1.8之后字符串常量池和静态变量在堆中;运动时常量池在元空间中,元空间是堆的实现,也可以说是在堆中

在这里插入图片描述

创建dog对象后,其成员属性还没有赋值,所以为默认值。

在这里插入图片描述

到这里,dog对象在内存中已经加载完毕。那假如再来一个cat(猫)对象,那内存中又是如何变化的?

public class Demo02 {
    public static void main(String[] args) {
        //创建对象
        Pet dog = new Pet();
        //给成员属性赋值
        dog.name = "旺财";
        dog.age = 3;
        //调用成员方法
        dog.speak();
		
        System.out.println(dog.name);
        System.out.println(dog.age);
        
        Pet cat =  new  Pet();

    }
}

在这里插入图片描述

注意:静态方法区,放所有的static,这是和类一起加载的,导致所有的对象都可以使用它。

[外链图片转存中…(img-hPzWWQ2T-1663417153854)]

注意:静态方法区,放所有的static,这是和类一起加载的,导致所有的对象都可以使用它。

最后,阳光就在天上,祝大家前程似锦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值