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()方法获取链表中某结点

二.后记

今天上午就到这吧,今天下午估计可以上第二课,不过晚上有上机,作业要留到明天了,加油!

上一篇 下一篇

猜你喜欢

热点阅读