2021-07-02Snapshot diagram

本文介绍了如何使用快照图来展示程序运行时的状态,包括堆栈、堆和不同类型值的表示。通过实例阐述了基本类型、对象类型、不可变值与引用的概念,并探讨了数组、集合、迭代器等数据结构在图中的表示。适合程序员交流和理解复杂设计思路。
摘要由CSDN通过智能技术生成

Snapshot diagram

为了理解微妙的问题,我们可以画出运行时发生的事情的图片。

快照图(Snapshot diagram)表示程序在运行时的内部状态—其堆栈(正在进行的方法及其局部变量)和堆(当前存在的对象)。

为什么我们使用快照图

–通过图片相互交谈。便于程序员之间的交流

–说明基本类型与对象类型、不可变值与不可变引用、指针别名、堆栈与堆、抽象与具体表示等概念。便于刻画各类变量随时间变化

–帮助解释团队项目的设计(与对方和TA)。便于解释设计思路

–为后续课程中更丰富的设计符号铺平道路。

基本类型的值和对象类型的值

1.原语值由裸常量表示。传入箭头是对变量或对象字段中的值的引用。
在这里插入图片描述
2.–对象值是按其类型标记的圆。

–当我们想显示更多细节时,我们会在里面写上字段名,箭头指向它们的值。更详细地,这些字段可以包括它们声明的类型。
在这里插入图片描述

再赋值和不可变值

例如:String s = “a”;
s = s + “b”;
String是不可变类型的一个例子,这种类型的值一旦被创建就永远不会改变。

不可变的对象(由它们的设计器设计为始终表示相同的值)在快照图中用双边框表示,就像我们的图中的字符串对象一样。
在这里插入图片描述
可变对象Mutable的值:
StringBuilder sb = new StringBuilder(“a”);
sb.append(“b”);

在这里插入图片描述
不可指定Unreassignable/不可更改Immutable的引用:
Java还提供了不可变的引用不可变的引用: 只分配一次而从不重新分配的变量。要使引用不可变,请使用关键字final声明它:
final int n = 5;
如果Java编译器不确信最终变量在运行时只分配一次,那么它将产生一个编译器错误。所以final给出了对不可变引用的静态检查。
在快照图中,不可访问的引用(final)由双箭头表示。
在这里插入图片描述
age可以改变,id不可以改变。
注意:引用是不可变的,但指向的值却可以是可变的
例如:final StringBuilder sb
可变的引用,也可指向不可变的值
例如:String s
练习题:
在这里插入图片描述在这里插入图片描述

数组和集合

1.Array:定长
2.List:可变长度
List是一个接口。列表中的成员必须是对象。

在这里插入图片描述3.Set:集合是零个或多个唯一对象的无序集合
一个对象不能在一个集合中出现多次。要么进去要么出去。
Set是一个抽象接口
在这里插入图片描述
4.Map地图类似于字典(键值)

在这里插入图片描述
5.Iterator——mutable type 迭代器
迭代器是一个逐步遍历元素集合并逐个返回元素的对象。
在Java中,当您使用for(…:…)时,迭代器被隐藏起来使用循环遍历列表或数组。
迭代器有两种方法:
–next()返回集合中的下一个元素——这是一个mutator方法!
–hasNext()测试迭代器是否已到达集合的末尾。
在这里插入图片描述
突变破坏迭代器:
在这里插入图片描述
ArrayList第一个移走后,剩下的都补位。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值