cs61b2018sp WEEK2.1 引用类型、递归和列表 视
2022-03-14 本文已影响0人
且乐一杯酒
2022.3.15
突然发现简书一天只能发两篇文章,昨天作业的文章就暂时收着,等以后哪天没发满两章再补上吧
WEEK2.1 引用类型、递归和列表
一.内容
1.海象之谜(The Mysteries of Walrus)
如图所示代码,问b的变化是否影响到a的变化
这里是引出引用类型的例子,答案是会的
这里又来一个例子,问x是否影响y
显然不会
为什么?
因为a,b指向的是同一个实例,而x,y不是
2.基本类型(Primitive Types)
首先,数据存储在内存(Memories)中,存储形式是二进制码(一堆01,bit全称Binary Digit)
java有8中基本类型,每当声明一个变量,即在内存中开拓相应空间,当赋值时,就把对应数据的二进制码给到变量.
注:老师提到了一个赋值黄金法则,即
=把一个变量的bit给另一个变量
3.引用类型(Reference Types)
new一个类时(即实例化对象),java就在内存中分配好相应的空间存储类的各种属性,而且new还告诉java这部分内存在哪里,即new一个类返回的是这个实例完成的类的地址
第一行:在内存8字节内存,分配给a
第二行:在内存中找Walrus所需内存(或更多,因为有其他东西要存)放置实例化对象,然后将此内存所在地址给a,此地址会是和a大小相同的位数,所以a保存的实际是一个地址(用c的指针想象)
第三和第四行:在内存8字节内存,分配给b,然后将a中保存的地址给b
java的第9类型就是Objects,有8字节大小,是一种引用类型
下面来一个小测试吧
小测试
w.weight和x的值变了吗?
doStuff方法的作用域不同于main,会自己开辟一个新的作用域,由图可见,只有引用类型才能改变原有的值
4.实例化数组(Instantiating Arrays)
在内存中开辟8字节空间给a,用来存放某数组的地址
实例化一个数组
把数组的地址给a
注:如果实例化的数组没有将其地址给一个变量,我们称这个数组是匿名的(Anonymous),很可能会被GC掉
5.链表(List)
这是java中链表的简单写法,是不是很简单?
大概长这样
这是老师改进后的链表,主要用了构造方法使其更简便了
size()求链表长度的方法代码递归(Recursion)法
这是迭代法
get()方法获取链表中某结点
二.后记
今天上午就到这吧,今天下午估计可以上第二课,不过晚上有上机,作业要留到明天了,加油!