对象内存与方法调用机制

对象的内存布局

对象、字符串和数组都是引用类型,指向的数

我们以下面main方法部分代码片段为例: 

Cat cat = new Cat();
cat.name = "小白";
cat.age = 12;
cat.color = "白色";

首先执行mian方法,会在栈里创建一个独立的main栈空间(这里说成main栈是为了便于区分栈),在执行Cat cat = new Cat(),执行完后会在堆中产生一个对象空间,cat指向该对象空间,cat的基本类型age数据会直接存到堆信息中,由于name,color是字符串所以会在方法区中常量池在开创一个空间,用来存储他们的数据,此时堆中name与color指向该空间地址

注:当new一个对象时会加载Cat类的属性信息和行为(方法信息)

我们以下面代码为例:

Persion p1 = new Persion();
p1.age = 10;
p1.name = "小明";
Persion p2 = p1; //把p1赋给了p2,让p2指向p1
System.out.println(p2.age)

内存图:

当我们new一个p1对象时,在堆中会创建一个内存空间,此时p1指向创建好的内存空间,如果属性信息是引用类型则数据会存到方法区,而栈里面的该属性内存地址存放的就是具体数据的地址,在执行Persion p2 = p1,会p2直接指向p1指向的内存空间。

java内存结构分析:

1.栈:一般存放基本数据类型(局部变量)

2.堆:存放对象(Cat cat,数组等)

3.方法区:常量池(常量,比如字符串),类加载信息

方法调用机制

我们以一下面代码段为例:

Person p1 = new Persion();
int returnRes = p1.getSum(10,20);//getSun(10,20)方法
public int getSum(int num1,int num2){int res = num1 +num2;return res;
}

首先main方法执行时,会在栈中创建一个main栈空间,在执行Person p1 = new Persion();执行完后会有一个对象空间产生,p1指向该对象空间,然后在执行int returnRes = p1.getSum(10,20);执行完后会在开一个栈空间(getSum栈独立空间,这里叫getSum栈便于区分栈空间),然后将10赋值给num1,将20赋值给num2,res就等于30,在执行return语句,将结果返回到int returnRes = p1.getSum(10,20)这个位置即返回给returnRes,当main方法结束后,整个程序退出(遵循栈的先进后出原则)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/452881.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT6调用音频输入输出(超详细)

目录 一、QT6音频调用与QT5的区别 1.QAudioSource代替QAudioInput类 2.QAudioSink代替QAudioOutput类 二、音频操作中Push和Pull的区别 三、依托于Websocket实现实时对讲机 1.AudioIputDevices类 2.AudioOutputDevices类 3.实现的AudioHandler类完整内容 本人实际是要完…

Open CASCADE学习|分割曲线

1、通过参数进行分割 分别获得曲线的 FirstParameter 和 LastParameter ,然后对参数进行分割,获得n个ui,并对每个ui调用D0(获得这个点的坐标值)或D1(获得这个点的坐标值和切向量)。这个方法的优…

海康IPC摄像机接入国标平台,发现一直不在线(离线)的处理方式

目 录 一、问题 二、问题分析 (一)常见设备离线问题的原因 (二)原因分析 三、问题查处 (一)设备端排查故障(设备端自查) 1、检查GB28181参数配置是否有误 2、…

【LeetCode: 292. Nim 游戏+ 博弈问题】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

算法——递归与搜索算法

1. 递归 ①什么是递归? 官方一点来说 递归指的是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。 通俗一点来说,递归就是一个函数自己调用自己的过程 ②什么情况下会用到递归? 我们在遇见一个问题的时候,我怎…

ffmpeg操作实战001:视频+音频文件融合

一、功能需求 把视频文件video.mp4 和音频文件audio.wav融合在一起,输出视频文件output.mp4 二、操作指令 ffmpeg -i video.mp4 -i audio.wav -c:v copy -map 0:v:0 -map 1:a:0 output.mp4 三、参数说明 ffmpeg: 这是用于执行FFmpeg命令行工具的命令。-i video…

深度学习(生成式模型)—— Consistency Models

文章目录 前言预备知识:SDE与ODEMethod实验结果 前言 Diffusion model需要多次推断才能生成最终的图像,这将耗费大量的计算资源。前几篇博客我们已经介绍了加速Diffusion model生成图像速率的DDIM和Stable Diffusion,本节将介绍最近大火的Co…

HarmonyOS 鸿蒙应用开发(九、还是蓝海,如何贡献第三方库)

快来共享第三方库吧,不但可以通过分享自己的成果,可以获得来自全球开发者的技术反馈和建议,提升自身技术能力,还有助于提高个人或团队在开源社区中的知名度和影响力。在流量时代和粉丝经济时代,获得曝光度和流量密码。…

Maven工程的配置及使用

一、Maven章节 Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具 1.1、maven的作用 1)依赖管理: 方便快捷的管理项目依赖的资源包(jar包)避免版本冲突 2)统一项目结构&…

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境,一是翻译环境,二是运行环境,计算机能识别的是二进制的指令,人写完代码后通过翻译环境,使代码变成计算机能读懂的可执行的机器指令&a…

go-redis hash slot 之旅

搭建redis 集群 创建一个网桥 docker network create -d bridge --subnet192.168.148.0/24 --gateway192.168.148.1 -o parenteno1 redis-net通过docker 文件创建redis 集群, 这里注意要不要使用redis 7以上的版本,不然会出问题 version: "3&quo…

ArcGIS学习(三)数据可视化

ArcGIS学习(三)数据可视化 1.矢量数据可视化 需要提前说明的是,在ArcGIS中,所有的可视化选项设置都是在“图层属性”对话框里面的“符号系统”中实现的。 对于矢量数据的可视化,主要有四种可视化方式: 按“要素”可视化按“类别”可视化按“数量”可视化按“图表”可视…