snapshot diagram的画法小结
小伙伴们是不是经常遇到这样的情况,明明我们写的代码编译通过了,却得到不了我们想要的输出。其实在编写JAVA程序时,我们并不是拿着高级的编辑器编完代码然后没有报错就万事大吉了,这样会让我们的程序出现很多潜在的BUG。只有深入了解运行时内存的情况,才能让我们真正了解我们所写的代码逻辑是否符合我们的需要。而怎样才能让我们更加直观的掌握代码运行时在内存中的逻辑呢?这就用到了一个叫snapshot diagram(内存快照图)的东西。
优点
它具有以下的优点:便于程序员之间的交流,它是一种程序员之间刻画程序的语言之一,简单而清晰的内存快照图使得程序员之间的交流变得快捷;它有利于刻画各变量随时间的变化,我们的程序是一步步执行的,某些变量,指针的变化和指向也随着时间一步步变化,我么能在内存快照图中动态的了解我们程序的执行情况;它还有利于解释设计思路,一行行代码可能会降低我们程序的可读性,而快照图清晰明了的解释了你的设计思路。
那么我们进入正题:
我总结了常见的内存快照图画法情况,大概涵盖一下几点:
1.引用的画法:当你为你的new出来的对象创建一个引用时,他在图中就画成它本身的符号就行(一般是英文字母),不用使用一个椭圆形框把它框起来。它有个箭头直接指向它所指向的内存空间,如下图所示(如果是有final修饰则箭头改为双线):
2.基本类型如整形,浮点数等直接用数字标识即可:
3.String类型有两种表示法,第一种双引号中间加入所表示的字符串,第二种用一个双线椭圆标识出String所在的空间:
4.在这里先解释双线和单线的箭头以及椭圆框的区别:双线表示不能再修改,对箭头来说是表明引用不能再指向别的内存空间,而对于椭圆来说,则是表示这个内存空间是一个immutable(不可变类型)。
5.集合类的表示:
(1)ArrayList:mutable,故而是单线的椭圆框,框内有若干数字表示List的对应元素的引用,每个引用分别指向相应的内存空间,例如下图表示ArrayList<String>且含有三个元素:
(2)HashSet: mutable,故而是单线的椭圆框,因为Set是无顺序的集合,所以集合内的引用无需显示的标明,例如下图 HashSet<Integer>:
(3)HashMap: mutable,故而是单线的椭圆框,同Set一样无顺序,所以也无需显示的标明引用的顺序,但需要标明每个键值对,如下是一个HashMap<String,Turtle>:
下面展示一个例题来具体说明怎么用snapshot来表明内存的变化:
Poem类有如下的Field:
首先先处理前三行画一个ArrayList<String>:
然后创建Poem对象,注意,该对象的构造方法采用防御是拷贝,所以它的lines指向的是和原来的List一样的不同内存:
getSomeLines是从诗Poem里提取对应的行,存到some列表里:
snapshot diagram的画法小结相关推荐
- Snapshot Diagram画法小结
Snapshot Diagram可以描述程序运行时的内部状态. 画Snapshot Diagram不仅能够让我们对程序的运行有所了解,而且还能加强我们对一些基本概念的认识和理解,如:基本数据类型.对象 ...
- 两种重要的图——Snapshot diagram UML diagram
Snapshot diagram (代码快照图) 用于描述程序运行时的内部状态,包括堆和栈的调用. 刻画各类变化随时间的变化,描述各类概念如:原始类型/对象类型,不可变对象/可变对象,引用别名 刻画基 ...
- markdown流程图画法小结
markdown流程图画法小结 markdown 画图 流程图 最简单的流程图为例 ```mermaid! graph TD A --> B //在没有(),[].{}等括号的情况之下,图标默 ...
- snapshot画法小结
snapshot体现了程序中数据的类型及依赖关系. 简单的说: 对于基本类型的值,使用单线箭头指向实际值,不需要表明数据类型. 对于对象的值: 如果是可变对象,使用单线椭圆,椭圆内写明对象的类型及对象 ...
- 哈工大软件构造课程知识点总结(二)
系列文章目录 哈工大软件构造课程知识点总结(一) 哈工大软件构造课程知识点总结(二) 哈工大软件构造课程知识点总结(三) 哈工大软件构造课程知识点总结(四) 哈工大软件构造课程知识点总结(五) 哈工大 ...
- 从零开始的软件构造复习[上篇]
第一章 1.1 软件构造的多维度视图(Multi-dimensional software views) Build-time, moment, code-level 代码如何在逻辑上被组织为基本的程 ...
- 软件构造复习笔记(四)数据类型与类型检验
目录链接 Part I Data type in programming languages 1.1Primitive types基本数据类型 1.2Object types对象数据类型 1.3一些注 ...
- HIT Software Construction Review Notes (chapter three)
1. 基本数据类型,对象数据类型 Java有几种基本数据类型,其中包括: - int(对于像5和-200这样的整数,但是限制于±2^31或大约±20亿的范围). - long(对于上下限为±2^63的 ...
- 哈工大软件构造期末知识点总结
哈工大软件构造试题构成: 1.30-45分的选择题,10-20题 2.55-70分的简答与设计题,5-6题 考试知识点(不全面): 1.git工具的知识点 2.Java设计模式(一共有23个,主要考察 ...
最新文章
- 关于 智能指针 的线程安全问题
- 前端JS调用微信扫一扫二维码
- IOS上传代码到CocoaPods并通过Pod下载
- 源码 linux下编译_Linux云服务器软硬链接及源码编译安装python3.8的一些备注
- UART_SEND详细设计方案
- mysql查看触发器_在mysql中如何查看和修改触发器的代码?请问各位大师,小弟先谢谢了!!!!!!!!!...
- 二叉树的迭代遍历(JavaScript)
- 现在是 RSS 复兴的时候了!
- 关闭rlogin服务linux,Linux rlogin命令
- [短评] 技术研发向市场运营让步
- px2rem 第三方库实践
- 计算机基础达 打字训练视频,「跟着八戒学电脑」快速打字必须掌握的基本功:指法练习...
- 不可不会的「反转链表」问题
- win2008R2 像CA证书服务器(Linux)申请CA证书
- Matlab中将横纵坐标改为自定义标签(set(gca,xtick)set(gca,xticklabel))
- 小米笔记本电脑的SN码如何查找?
- 数学规划模型(二):线性规划模型
- 用antd实现番茄钟
- c++读取倍福PLC中轴状态
- comsol学习中心:定义与材料选择