JAVA_SE基础——24.面向对象的内存分析

黑马程序猿入学blog ...


接着上一章的代码:

//车类
class Car{//事物的公共属性使用成员变量描写叙述。

String name; //名字的属性 String color; //颜色属性 int wheel; //轮子数 //事物的公共行为使用函数描写叙述。 public void run(){ System.out.println(name+"飞快的跑起来啦..."); } } class Demo1{ public static void main(String[] args) { //使用了Car类声明了一c变量, c变量指向了一个车对象。

Car c = new Car(); //设置车对象的属性值。 c.name = "BMW"; c.color = "白色"; c.wheel = 4; //訪问车对象的属性值 System.out.println("名字:"+ c.name+" 颜色:"+ c.color+" 轮子数:"+c.wheel); c.run(); } }

结果是:

名字:BMW 颜色:白色 轮子数:4

BMW飞快的跑起来了



上面代码在内存中是怎么执行的呢?

以下我来给大家分析下:


c是局部变量

1.先声明了c变量 分配在栈内存

2.new Car  在堆内存创建了一个车对象  看看Car有那些成员属性,然后再给对象分配初始值,为name=null。color=null。wheel=0     (成员一旦创建。对象的成员变量也会立即分配默认的初始值)  然后把地址0x97赋给了c       c就指向了车的这个对象。

3.

c.name  就是c拿着地址找到车的对象   然后把name改成BMW.       

c.color 就是c拿着地址找到车的对象   然后把color 改成白色.

c.wheel 就是c拿着地址找到车的对象   然后把wheel改成4.



以下再看个样例:

//车类
class Car{//事物的公共属性使用成员变量描写叙述。String	name; //名字的属性String	color; //颜色属性int wheel;	//轮子数//事物的公共行为使用函数描写叙述。

public void run(){ System.out.println(name+"飞快的跑起来啦..."); } } class Demo1{ public static void main(String[] args) { Car c1 = new Car(); Car c2 = new Car(); c1.name = "宝马"; c2.name = "大众"; System.out.println("名字:"+ c1.name); } }

结果:名字:宝马

 

看下图解释:

1.先声明了c1变量 分配在栈内存

2.new Car  在堆内存创建了一个车对象  看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null。wheel=0    (成员一旦创建。对象的成员变量也会立即分配默认的初始值)  然后把地址0x97赋给了c1       c1就指向了车的这个对象。

3.再声明了c2变量 分配在栈内存

4.再new 一个 Car  在堆内存再创建了一个车对象  看看Car有那些成员属性。然后再给对象分配初始值。为name=null,color=null,wheel=0    (成员一旦创建,对象的成员变量也会立即分配默认的初始值)  然后把地址0x67赋给了c2       c2就指向了车的这个对象。

5.           c1.name  就是c1拿着地址找到车的对象   然后把name改成" 宝马 "    

6.           c2.name  就是c2拿着地址找到车的对象   然后把name改成“ 大众 ”

7.            最后输出c1.name            c1就拿着地址找到相应的对象  输出了那个对象的name  

所以结果是:宝马

以下再把这个样例改下:

//车类
class Car{//事物的公共属性使用成员变量描写叙述。String	name; //名字的属性String	color; //颜色属性int wheel;	//轮子数//事物的公共行为使用函数描写叙述。

public void run(){ System.out.println(name+"飞快的跑起来啦..."); } } class Demo1{ public static void main(String[] args){ Car c1 = new Car(); c1.name = "宝马"; Car c2 = new Car(); c2.name = "大众"; c1 = c2; System.out.println("名字:"+ c1.name); } }

结果:大众

下图解释:


1.先声明了c1变量 分配在栈内存

2.new Car  在堆内存创建了一个车对象  看看Car有那些成员属性。然后再给对象分配初始值,为name=null,color=null,wheel=0    (成员一旦创建,对象的成员变量也会立即分配默认的初始值)  然后把地址0x97赋给了c1       c1就指向了车的这个对象。

3.           c1.name  就是c1拿着地址找到车的对象   然后把name改成" 宝马 "  

4.再声明了c2变量 分配在栈内存  

5.再new 一个 Car  在堆内存再创建了一个车对象  看看Car有那些成员属性,然后再给对象分配初始值。为name=null,color=null,wheel=0    (成员一旦创建。对象的成员变量也会立即分配默认的初始值)  然后把地址0x67赋给了c2       c2就指向了车的这个对象。

6.           c2.name  就是c2拿着地址找到车的对象   然后把name改成“ 大众 ”

7.把c2的持有地址赋给了c1       c1的地址原来是0x97 改为 0x67    

8.  最后输出c1.name         c1拿着改后的地址去找地址为0x67的对象        输出为0x67地址的对象中的属性name.

所以结果为;大众

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

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

相关文章

煮茶社区AVR开发板第二版[转]

原图:http://blossom.cnblogs.com/gallery/image/21891.html

[Kogel.Subscribe.Mssql]SQL Server增量订阅,数据库变更监听

此框架是SQL Server增量订阅,用来监听增删改数据库数据变更目前仅支持SQL Server,后续会支持MySQL和Oracle,Nuget上可以下载安装或者使用Nuget命令添加包dotnet add package Kogel.Subscribe.Mssql --version 0.0.0.1可以用来处理DB主从同步&…

MFC 单选按钮Radio使用注意

使用MFC Radio时遇到问题:数据交换时出现断言崩溃框 定位于: 解决方法: 1、按CTRLD,保证同一组内的radio的tab序号是连续的; 2、同一组内,设置 radio1的属性: group、tabstop、auto均为true&am…

C# 字符串操作:split、substring、Format

1.split split可以使用多个字符切割。 "test[12]"切割后是3个字符串,最后一个为空。 string testString "test[12]";string[] testData testString.Split([,]);int testLength testData.Length;Console.WriteLine(testLength.ToString());…

flac格式转换mp3格式_MP3,FLAC和其他音频格式之间有什么区别?

flac格式转换mp3格式Digital audio has been around a very long time so there’s bound to be a plethora of audio formats out there. Here are some of the more common ones, what differentiates them, and what to use them for. 数字音频已经存在了很长时间&#xff…

Kubernetes:Flomesh 服务网格与多集群通信

Kubernetes 成功普及了容器集群的概念。许多用户已经在多个集群中部署应用,组织需要运行多个 Kubernetes 集群可能来自以下原因(并非详尽列表):• 位置• 延迟(尽可能在靠近客户的地方运行应用程序)• 管辖…

袁永福软件行业从业经历

简化版》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》 袁永福简历 袁永福,男,1980年生于江西省九江市都昌县,2001年南京东南大学动力工程系本科毕业。毕业后一直从事计算机软件开发工作&…

小程序之地图导航

同学们平常使用地图的时候应该都有注意到,当我们在一个应用中选择一个地址,打开一个地图,往往会有两种显示方式,一个是显示当前自己的位置;一个是显示对方,也就是目的地的位置;如下图&#xff1…

PS2019摄影后期处理(一)

高高手之路笔记 一、学习方法 内外兼修:技术会淘汰、更新,自己内在也要提高。 二、照片格式、色彩空间 JPEG TIFF RAW sRGB:互联网相关图片,电子设备 三、照片风格 自己定义照片格式,直接后期效果 相机自带工具&a…

mdnsresponder_什么是mDNSResponder.exe / Bonjour,如何卸载或删除它?

mdnsresponderYou are no doubt reading this article because you’ve noticed the mDNSResponder.exe process running in Task Manager, you don’t remember installing it, and it doesn’t show up in the Add/Remove programs in Control Panel. So what is it, and how…

Windows 10下,如何使用PowerShell批量重启局域网电脑

PowerShell 在Windows 10中越来越受到微软重视,甚至被微软安排在开始按钮超级菜单中替换了一直以来默认的命令提示符(当然还可以换回去),这和该工具越来越强大密不可分。这次就介绍一个“群重启”命令,可让局域网内的电脑集体重启。1、单机重…

.NET MAUI学习指南

由于.NET MAUI这项技术出来不久相关的学习资源暂时除了官网以外没有太好的学习资源,这篇文章主要向大家分享几种学习.NET MAUI的学习途径,如果有好的学习资源欢迎大家私信给我然后更新到后续的文章里。(以下推荐学习途径均为免费且无广告的资…

循序渐进DB2(第2版)——DBA系统管理、运维与应用案例

《循序渐进DB2(第2版)——DBA系统管理、运维与应用案例》基本信息作者: 牛新庄出版社:清华大学出版社ISBN:9787302323013上架时间:2013-7-3出版日期:2013 年7月开本:16开页码:612版次&#xff1…

PS2019摄影后期处理(二)

一、曲线 二、曲线与通道 三、HSL局部调整 色相、饱和度、亮度 a.色相:一个颜色,帽子是红色 b.饱和度:树木葱郁一点 c.饱和度:衣服连杆 便黑白: 1.调低所有饱和度 2.将某个颜色饱和度提高,再转灰度。…

管理员获得所有权_在Windows 7中获得注册表项的所有权

管理员获得所有权We have previously written about how to take ownership of files and folders in Windows 7, but there may be times when you need to take ownership of or assign full permission for certain registry keys. This article shows you how to do this. …

Dojo QuickStart 快速入门教程 (2) 基本框架

下载库 首先,下载 Dojo 库:http://www.dojotoolkit.org/downloads 放了方便测试,我将文件将解压到 Web Server 的 "js/dojotoolkit" 文件夹中,如果你愿意,也可以缀上版本号。最后的目录结构应该像下图这样&a…

摊牌了,.NET开发者,准备赋能未来

hi,这里是桑小榆。一名.net开发,从19年毕业至今一直从事相关技术已近4年。发展至今,很有必要分享分享我的经历以及对于.net开发的看法和见解。篇幅有些长,无论你是学生,职业人,.NET开发者还是其他语言开发者…

BZOJ 3434 时空穿梭

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id3434 题意: 思路: const int mod10007; const int N100005;int g[22][N]; int C[N][22],mou[N]; int h[22][N][13];int prime[N],cnt; int tag[N];void init() {int i,j;mou[1]1;f…

plex实现流媒体服务器_如何从Plex Media Server离线查看下载和同步媒体

plex实现流媒体服务器Streaming content from your Plex Media Server is great, but sometimes—like when you’re going to be offline or stuck with cruddy internet speeds while traveling—there’s no substitution for having a copy of the media stored on your de…

.NET Conf 2022 大会日程全曝光!!前沿、硬核、创意.....精彩就等你来!!

倒计时2天一场规模宏大,内容硬核,大咖齐聚的.NET 领域年度最大的盛会即将开幕.NET Conf 2022 12月3日-12月4日开源 安全 赋能诚邀您的加入立即扫码预约加入.NET年度盛宴!!.NET Conf China 2022.NET Conf China 2022是面向开发人员…