14、类与对象(采用图解方式分析内存结构)①

在idea中创建一个新文件,名称为Hello.java
在这里插入图片描述
其中,Hello就是一个类,main是这个类里面的方法,这意味着我们在学习的时候已经在使用类了。

对象和类

  • 一、概念
  • 二、⭐内存分配机制分析
    • Ⅰ、基本内存结构
    • ⭐⭐Ⅱ、调用类方法的内存分析(栈思想)

一、概念

简单性解释:类是一个模板,对象是根据这个模板创建的(专业语法:类的实例)。
看图就懂了:
在这里插入图片描述

上代码:

//建立一个类
class Dog{//类的属性:可以为基本数据类型,也可以为引用类型(数组、对象)String breed;       //品种String size;        //大小String name;        //名字//类的方法:方法修饰符有public、private等,后期在写笔记void eat(){System.out.println("吃东西");}void run(){System.out.println("跑步");}void sleep(){System.out.println("睡觉");}
}public class Hello{public static void main(String args[]) {//用类去创建一个对象Dog Dog1 = new Dog();//赋值属性Dog1.breed = "博美";		Dog1.size = "小型犬";Dog1.name = "来福";//调用方法Dog1.eat();Dog1.run();Dog1.sleep();}
}

结果:
在这里插入图片描述
拿人这个群体来举例的话,人类就是一个抽象集合(属性包括姓名、性别、年龄,方法包括吃饭、睡觉),我们每个人都是根据人类这一个模板来创建的,都有姓名、性别、年龄,都会吃饭、睡觉,因此是具体的。(很简单的理解就可以了,没必要记繁杂的专业解释!!!)

注意细节:
1、访问里面的属性、方法是用 对象名.属性(方法)进行访问。
2、属性如果不赋值,有默认值。(和数组一样)

数据类型默认值
byte0
short0
int0
long0
float0.0
double0.0
char\u0000
booleanfalse
Stringnull

二、⭐内存分配机制分析

Java内存结构(简单版)
1、栈:一般存放基本数据类型(局部变量)
2、堆:存放对象(数组、Dog1对象)
3、方法区:常量池(常量,比如字符串),类加载信息

对下面的代码进行内存分析:(步骤看代码,一定要看啊,朋友们,和数组其实很像)

Ⅰ、基本内存结构

//用类去创建一个对象(采用先声明,在创建的方式,方便演示步骤而已)
//1、先加载Dog类信息到方法区,包括属性和方法,只会加载一次
Dog Dog1;		
//2、new Dog():类为引用类型,在堆中分配空间,进行默认初始化
//3、把步骤2创建的对象地址赋给Dog1,此后Dog1指向这个对象
Dog1 = new Dog();//4、进行指定的初始化
Dog1.breed = "博美";
Dog1.size = "小型犬";
Dog1.name = "来福";Dog Dog2 = new Dog();	//这里不在加载Dog信息,因为只加载一次就可以了

在这里插入图片描述
如果看过13、数组(一维、二维用图形化的方式解析内存空间⭐)这篇文章就会发现,在堆区中发生了变化,为什么里面的breed、size、name存放的是一个地址呢?因为这几个变量是String类型(引用类型),所以里面存储的是相关值的地址,然后通过这个地址在指向“博美”、“小型犬”、“来福”这几个值。

这里提示,String类型有点特殊,它的值是存放在变量池的,当我们赋值Dog1.breed = “博美”,JVM首先会在常量池中找有没有“博美”这个字符串,若有则直接指向该地址,若无会在常量池创建一个新的字符串,然后指向该字符串的地址,推荐去看这个链接:java字符串内存 java中字符串存在哪里

⭐⭐Ⅱ、调用类方法的内存分析(栈思想)

需要用到栈的一点知识:栈是先进后出的,意味着,最后进来的反而最早出去。
这里只演示方法的调用,还没有涉及方法里面的值传递和引用传递,下一篇在写这个,这里只简单展示栈的变化。
每次调用方法都会在栈区开辟一块新的区域给这个方法,内存图中的栈名都是按演示方便取得,不要在意哈哈哈。
①首先展示的是只在main()方法里面调用Dog类方法的情况:
在这里插入图片描述

 
②这里展示的是先在main()方法中访问Dog类的方法,然后Dog类中的方法在访问Dog类自身方法的情况:
在这里插入图片描述
在这里插入图片描述
其实很简单的,只要你学过栈,就能简单理解成每次调用一个方法都要进栈,执行完该栈中的代码之后就要出栈,就ok了。

下一篇文章写类方法中的值传递和引用传递,这篇文章的进出栈图都是简单举例,还没有任何修改类属性的步骤。
本人正在B站跟着韩顺平老师学Java(非广告),所以做个笔记仅供学习,文章虽标为原创,但大体思路是韩顺平老师的授课思路,在此基础上加上了自己的理解,不喜勿喷哦。
大家一起学,一起进步!!
各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。

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

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

相关文章

使用 Django 显示表中的数据

1、问题背景 当我们使用 Django 进行 Web 开发时,经常需要在 Web 页面上显示数据库中的数据。例如,我们可能需要在一个页面上显示所有用户的信息,或者在一个页面上显示所有文章的标题和作者。那么,如何使用 Django 来显示表中的数…

打包软件注意

1.建个文件夹D:333 /Dalsa_Cameras /cam1 cam2 2. 3.缺的包 4.自动启动.exe exe快捷方式放一起

编程零基础,如何学习Python?

初学者选择Python入手着实是一个不错的方向,入手简单且广泛的运用是它最显著的特色了。 那有几个问题,我想是开始学习Python之前应该了解的, python能做什么? 发展前景与工作机会有哪些? 需要学习哪些内容&#xf…

英国金融时报:波场TRON出席康奈尔大学区块链会议

近日,康奈尔区块链大会的白金赞助商波场TRON在罗斯福岛的康奈尔大学科技校区(Cornell Tech)举办多项活动,消息得到英国金融时报,费加罗报和Benzinga等权威外媒报道,这全面彰显了波场TRON的领导力。大会吸引了包括学生、学者和行业领袖等在内的 800 多名参与者,凸显了波场TRON致…

迅为RK3562开发板专为3562编写10大分类2900+页文档

iTOP-3562开发板采用瑞芯微RK3562处理器,内部集成了四核A53Mali G52架构,主频2GHZ,内置1TOPSNPU算力,RK809动态调频。支持OpenGLES1.1/2.0/3.2、0penCL2.0、Vulkan 1.1内嵌高性能2D加速硬件。 内置独立NPU, 算力达 1TOPS,可用于轻…

Geotools--生成等值线

好久没用geotools去写东西了&#xff0c;因为近几年一直在接触所谓数字孪生和可视化相关项目&#xff0c;个人的重心也往前端可视化去倾斜&#xff0c;在后端的开发上到变得停滞下来。 这次用的是geotools 28.4版本&#xff0c;生成等值线的方法在 <dependency><group…

【CTF Web】NSSCTF 3868 [LitCTF 2023]这是什么?SQL !注一下 !Writeup(SQL注入+报错注入+括号闭合+DIOS)

[LitCTF 2023]这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 为了安全起见多带了几个套罢了o(▽)q 出题人 探姬 解法 先试试这个&#xff1a; )))))) or 11 -- 有结果了&#xff0c;但是这个 flag 是假的。 flag 可能在其他表里。用 hackbar 上 DIOS payload。 …

Meta 推出新型多模态 AI 模型“变色龙”(Chameleon),挑战 GPT-4o,引领多模态革命

在人工智能领域&#xff0c;Meta 近日发布了一款名为“变色龙”&#xff08;Chameleon&#xff09;的新型多模态 AI 模型&#xff0c;旨在挑战 OpenAI 的 GPT-4o&#xff0c;并刷新了当前的技术标准&#xff08;SOTA&#xff09;。这款拥有 34B 参数的模型通过 10 万亿 token 的…

3步找回丢失数据,EasyRecovery让数据恢复如此简单!

在数字化时代&#xff0c;数据已成为我们生活和工作中不可或缺的一部分。然而&#xff0c;数据丢失却是一个令人头疼的问题。无论是因为意外删除、硬盘损坏还是系统崩溃&#xff0c;丢失的文件和数据都可能给我们造成巨大的经济损失和时间浪费。因此&#xff0c;如何高效利用现…

tcp协议介绍,协议段格式(端口号,首部长度,窗口大小,序号,确认序号,6个标志位),流量控制,确认应答机制,捎带应答,三次握手的双方认知不一致问题

目录 tcp协议 介绍 传输控制协议 图解 全双工 缓冲区 控制 tcp协议段格式 数据在不同层的名称 图解 ​编辑 端口号 首部长度 窗口大小 -- 引入 前提 流量控制 确认应答机制 窗口大小 -- 介绍 序号 -- 引入 确认应答机制的进一步探讨 如果应答丢失 捎带应…

《我的阿勒泰》最经典的6句话

这是首部散文影视化改编的作品&#xff0c;剧集里的每一帧画面&#xff0c;都堪比电影大作。 阿勒泰壮丽广阔的风光&#xff0c;如同一幅幅动人的画卷展现在我们面前&#xff0c;让人沉醉其中。李文秀平淡朴实的生活&#xff0c;却溢出了蓬勃的生命力&#xff0c;直击心灵。只…

磁盘管理后续——盘符漂移问题解决

之前格式化磁盘安装了文件系统&#xff0c;且对磁盘做了相应的挂载&#xff0c;但是服务器重启后挂载信息可能有问题&#xff0c;或者出现盘符漂移、盘符变化、盘符错乱等故障&#xff0c;具体是dev/sda, sdb, sdc 等等在某些情况下会混乱掉 比如sda变成了sdb或者sdc变成了sdb等…

2024最新TikTok抖音国际版,tiktok正版免拔卡安装来了!

保姆级教程&#xff01;2024最新TikTok抖音国际版&#xff0c;无限制&#xff01;tiktok正版免拔卡安装方法来了&#xff01; TikTok这款APP为何让全球都为之疯狂&#xff1f;因为它更懂人性&#xff0c;懂的人都懂&#xff01; 我是你的老朋友阿星&#xff0c;今天阿星要给大…

【pyspark速成专家】11_Spark性能调优方法2

目录 ​编辑 二&#xff0c;Spark任务UI监控 三&#xff0c;Spark调优案例 二&#xff0c;Spark任务UI监控 Spark任务启动后&#xff0c;可以在浏览器中输入 http://localhost:4040/ 进入到spark web UI 监控界面。 该界面中可以从多个维度以直观的方式非常细粒度地查看Spa…

VSCODE中F12无法跳转,快捷键设置F12和insert混淆了

异常现象 最近用新电脑&#xff08;华为&#xff09;的时候&#xff0c;发现VSCODE经常按F12无法跳转&#xff0c;在快捷键设置当中&#xff0c;也是设置成功的&#xff1b; 此时重新去快捷键设置&#xff0c;会发现按 F12变为了Insert 解决方法 华为笔记本的Fx按键&#x…

LeetCode/NowCoder-栈和队列OJ练习

孜孜不倦&#xff1a;孜孜&#xff1a;勤勉&#xff0c;不懈怠。指工作或学习勤奋不知疲倦。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;括号匹配问题 题目二&#xff1a;用队列实现栈 题目三&#xff1a;用栈实现队列 题目四&#xff1a;设…

这款网站测试工具,炫酷且强大!【送源码】

随着互联网的普及和发展&#xff0c;Web 应用程序的数量也越来越多&#xff0c;各种网络问题也是层出不穷&#xff0c;因而监测这些 Web 应用程序的性能和可用性变得非常重要。 今天的文章&#xff0c;了不起和大家分享一款十分好用的的网站分析项目 - Web-Check。 项目简介 …

华为WLAN实验继续-2,多个AP如何部署

----------------------------------------如果添加新的AP&#xff0c;如何实现多AP的服务----------- 新增加一个AP2启动之后发现无法获得IP地址 在AP2上查看其MAC地址&#xff0c;并与将其加入到AC中去 打开AC&#xff0c;将AP2的MAC加入到AC中 sys Enter system view, re…

HttpClient cookie爬虫记录

记录一次java语言使用httpclient爬取网站接口数据的经历 需要用到的依赖&#xff1a; httpclient和httpcore是封装了http请求的工具类 jsoup可以将返回的网页html找到你需要的xml节点&#xff0c;很方便 <dependency><groupId>org.apache.httpcomponents</gr…

Java面试八股之++操作符是线程安全的吗

操作符是线程安全的吗 操作符本身在Java中并不是线程安全的。这个操作实际上包含三个步骤&#xff1a;读取变量的值、将值加1、然后将新值写回内存。在多线程环境下&#xff0c;如果多个线程同时对同一个变量执行操作&#xff0c;就可能出现竞态条件&#xff08;race conditio…