Java中对象的内存解析及匿名对象的使用

本文介绍了Java中对象在内存中的存储结构,强调了显式对象和匿名对象的区别。通过示例展示了如何创建对象,解释了匿名对象只能调用一次属性或方法的原因,并提供了实现匿名对象多次调用的方法。内容包括对象实例化、内存分配以及匿名对象的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

       什么是对象?万事万物皆可以是对象,对象是类的实例化 。其中,类是对一类事物的描述,是抽象的、概念上的定义,而对象则是实际存在的该类事物的每个个体。比如,人就是一个类,而我们每一个人就是一个对象。

1、对象在内存中的简化结构

       我们知道在内存中,栈用来存放局部变量,堆用来存放new出来的数组或对象,不懂的可以看我的另一篇文章了解一下 : Java中一维、二维数组在内存中的结构
       现在我们设计一个Person类,该类含有name、age 和 isMale 三个属性。

	class Person{
		String name;
		int age;
		boolean isMale;
	}

       当我们创建一个对象时,即是在堆中开辟了一个空间,该空间存放一个对象,含有对象的所有属性与方法。

	// 创建了一个对象 p1
	Person p1 = new Person();

       如图所示,我们创建了两个对象,分别将变量名 p1、p2 指向这两个对象,而 需要注意的是 p3,它并没有在堆中新建一个对象,而是将 p1 对象的地址赋给了 p3 而已,所以 p1 和 p3 指向的是同一个对象。
在这里插入图片描述

2、显式对象与匿名对象

       好了,简单了解一下对象的内存解析,下面来了解一下什么是显式对象和匿名对象。(已定义了CommunApp 类)

	public class AnonymousClass {
		public static void main(String[] args) {
			// 这是显式对象
			CommunApp a = new CommunApp();

			// 这是匿名对象,直接 new 不赋给某个变量即是匿名对象
			new CommunApp();
		}
	}

       可以看到,我们 new 完一个对象将该对象赋给一个变量名,则称该对象为显式对象。而 我们 new 完一个对象之后不赋给任何变量名即是匿名对象

       需要注意的是,匿名对象只能调用一次属性或方法。为什么这么说呢?先来看看如下代码:

		new CommunApp().videoCall();
		new CommunApp().writeCommun();

       当我们执行上面两条代码调用 CommunApp 类的不同方法时,实际上是创建了两个匿名对象。我们知道,每 new 一个对象即是在内存的堆中开辟一个空间,所以不难理解。也就是说,每匿名一个对象只能调用一次属性或方法
       那么如果想调用多次属性和方法又该怎么办呢?

3、匿名对象的多次调用

       **若要使用多次调用,则需要新建一个类,然后声明一个方法,通过该方法将匿名对象作为实参传递给该方法,从而实现匿名对象的多次调用。**如下代码所示:

	public class AnonymousClass {
		public static void main(String[] args) {		
			/*
			 * 若要只匿名一个对象,但要调用多个属性或方法,可以采用以下方法,
			 * 其实这还是在栈中声明了一个变量,所以才能进行多次调用
			 */
			Wechat wc = new Wechat();
			
			//将匿名对象作为实参传递给该 wc 对象的方法
			wc.show(new CommunApp());
		}
	}

	class Wechat {
		public void show(CommunApp ca) {
			ca.videoCall();
			ca.writeCommun();
		}
	}

	class CommunApp {
		public void videoCall() {
			System.out.println("可以视频通话!");
		}

		public void writeCommun() {
			System.out.println("可以文字交流!");
		}
	}

       以上帖子供大家学习交流,如有错误,欢迎指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiden_Davis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值