【cs61b】学习笔记day2

这篇具有很好参考价值的文章主要介绍了【cs61b】学习笔记day2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

历史文章目录

【cs61b】学习笔记day1



List

两个小问题

思考下面两个代码分别输出什么

Walrus a = new Walrus(1000, 8.3);
Walrus b;
b = a;
b.weight = 5;
System.out.println(a);
System.out.println(b);
int x = 5;
int y;
y = x;
x = 2;
System.out.println("x is: " + x);
System.out.println("y is: " + y);

【cs61b】学习笔记day2,cs61b,java,学习,笔记,java
【cs61b】学习笔记day2,cs61b,java,学习,笔记,java

从下图可以看出,a和b指向的同一个实例,而x和y是两个独立的
【cs61b】学习笔记day2,cs61b,java,学习,笔记,java

bits

在计算机中,数字72和大写字母H都是以01001000来存储,那么java是如何区分他们的?
答: 以类型区分

在Java, 有8 八种基本类型: byte, short, int, long, float, double, boolean, char

当在Java中声明一个特定类型的变量时:

  • 计算机预留了足够的比特来存储这种类型的东西。
  • 示例:声明一个int会留出一个32位的“盒子”。
  • 示例:声明一个double会留出一个64位的盒子。
  • Java创建一个内部表,将每个变量名映射到一个位置。Java不会向保留框中写入任何内容。
  • 为了安全起见,Java不允许访问未初始化的变量,也就是没有。

声明一个变量

Java语言不允许访问数据块的确切地址,与C语言不同,在C语言中,可以向语言询问数据块的确切地址。
Java的这个特性是一种权衡,对程序员隐藏内存位置使您无法控制,从而阻止进行某些类型的优化。它也避免了大量非常棘手的编程错误。在非常低成本计算的现代时代,这种权衡通常是值得的。
在声明变量时,Java不会向保留框中写入任何内容。换句话说,没有默认值。因此,Java编译器会阻止使用变量,直到使用=操作符将该框填满位之后。
When you writeyou are telling the Java interpreter to copy the bits from x into y
当写 y = x, 其实是告诉Java解释器将x中的位复制到y中。

引用类型

上面,我们说过有8种基本类型:byte、short、int、long、float、double、boolean和char。其他所有类型,包括数组,都不是基本类型,而是引用类型。

当我们使用new实例化一个对象(例如Dog, Walrus, Planet)时,Java首先为类的每个实例变量分配一个方框,并用默认值填充它们。构造函数通常(但不总是)用其他值填充每个框。
引用变量声明
当我们声明任何引用类型(Walrus、Dog、Planet、array等)的变量时,Java都会分配一个64位的盒子,无论对象是什么类型。64位盒中包含的不是关于对象的数据,而是内存中对象的地址

方框和指针表示法

就像以前一样,很难解释引用变量中的一堆位,所以我们将创建一个简化的参考变量的方框符号如下:
如果一个地址全是零,我们将用null表示它。
非零地址将由指向对象实例化的箭头表示。

【cs61b】学习笔记day2,cs61b,java,学习,笔记,java
【cs61b】学习笔记day2,cs61b,java,学习,笔记,java
下面来解释最开头的问题,为什么a和b是一样的

Walrus a = new Walrus(1000, 8.3);
Walrus b;
b = a;

第一行执行完毕,我们得到下面的:
【cs61b】学习笔记day2,cs61b,java,学习,笔记,java

第二行执行完,得到下面的图片:
【cs61b】学习笔记day2,cs61b,java,学习,笔记,java
根据GRoE(黄金相等法则,就是说,在java中的 ‘=’ 是将等号右边的赋值给等号左边的变量),也就是说第三行是把a中存储的地址复制给b,所以b也是指向相同的实例。

当我们向函数传递值时,实际上是进行的值传递。

数组的实例化

存储数组的变量和其他变量一样都是引用变量。
考虑下面的声明:

int[] x;
Planet[] planets;

这两个声明都创建了64位的内存盒。
x只能保存int数组的地址,而planets只能保存Planet数组的地址。
实例化数组与实例化对象非常相似。例如,如果我们创建一个大小为5的整数数组,
如下所示:

x = new int[]{0, 1, 2, 95, 4};

然后new关键字创建5个32位的盒子,并返回整个对象的地址,以便分配给x。
如果丢失了与地址对应的位,则会丢失对象。
例如,如果特定Walrus的地址的唯一副本存储在x中,那么x = null将导致永久丢失该Walrus。这并不一定是一件坏事,因为您通常会决定不再使用某个对象,因此简单地丢弃引用是安全的。

链表

三种等价的表示链表的方法:

public class IntList {
    public int first;
    public IntList rest;        

    public IntList(int f, IntList r) {
        first = f;
        rest = r;
    }
}
IntList L = new IntList(5, null);
L.rest = new IntList(10, null);
L.rest.rest = new IntList(15, null);
IntList L = new IntList(15, null);
L = new IntList(10, L);
L = new IntList(5, L);

用递归方法求链表长度

/** Return the size of the list using... recursion! */
public int size() {
    if (rest == null) {
        return 1;
    }
    return 1 + this.rest.size();
}

迭代求长度:

/** Return the size of the list using no recursion! */
public int iterativeSize() {
    IntList p = this;
    int totalSize = 0;
    while (p != null) {
        totalSize += 1;
        p = p.rest;
    }
    return totalSize;
}

SLList

IntList类中它的数据结构有一些裸露,即所有的方法、变量、构造方法都在一个类中。这不太符合Java语言创造数据结构的习惯。所以在这一章中,我们希望可以创造一件“衣服”,通过这个“衣服”,即中间类,架起外部类接触到内部数据结构的桥梁。

首先我们构造内部的数据结构IntNode类:
sllist增加了头节点
【cs61b】学习笔记day2,cs61b,java,学习,笔记,java
关于public和private,我们一般把类中的属性设置为private,不允许直接访问,提高了安全性文章来源地址https://www.toymoban.com/news/detail-648181.html

到了这里,关于【cs61b】学习笔记day2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序Day2笔记

    1. 数据绑定 数据绑定的基本原则 在data中定义数据 在WXML中使用数据 2. 在data中定义页面的数据 在页面对应的.js文件中,把数据定义到data对象中。 3. Mustache语法的格式 把data中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可。语法格式为: view{{ 要绑

    2024年02月09日
    浏览(33)
  • 网络安全笔记第二天day2(等级保护)

    1.网络协议安全 1.1等级保护阶段  等级保护1.0:由国家1994年颁发的《中国人民共和国计算机信息系统安全保护条列》(国务院令147号) 等级保护2.0:2019年12月,网络安全等级保护2.0国家标准正式实施 新等保系列标准目前主要有6个部分 一、GB/T 22239.1 信息安全技术网络安全等级

    2024年02月07日
    浏览(43)
  • 黑马机器学习day2

    转换器和预估器(estimator) 实例化一个转换器类        Transformer 调用fit_transform() 转换器调用有以下几种形式: fit_transform fit transform 在sklearn中,估计器是一个重要的角色,是一类实现了算法的API 1、用于分类的估计器: 1)sklearn.neighbors k近邻算法 2)sklearn.native_bayes 贝叶斯

    2024年02月13日
    浏览(42)
  • C++学习(day2)

    C语言风格的字符串依然支持,使用字符数组的形式存储字符串,字符串标志:‘\\0’ C++风格的字符串,本质上是string类的对象 使用要求:需要加头文件:#include 单个数据的初始化和赋值 方式 解释 方式1 string s2 = “ni hao”; 方式2 string s3(“shang hai”); 方式3 string s4{“zhangpeng

    2023年04月24日
    浏览(40)
  • Go学习-Day2

    个人博客 驼峰法,首字母大写可以在其他包里使用,首字母小写只能在本包内使用 跨包使用,的import地址从src的子目录开始,src以及src所在的GOPATH自动补全 定义变量 var+变量名+变量类型 自动推断类型 简略写法 对应的,可以声明多个变量 另一种声明方法,开发中常用

    2024年02月12日
    浏览(41)
  • 【剑指offer】学习计划day2

    目录 一. 前言  二.从尾到头打印链表         a.题目          b.题解分析           c.AC代码   三. 反转链表          a.题目          b.题解分析         c.AC代码  四. 复杂链表的复制          a.题目          b.题解分析          c.AC代码  本系列是针对Leetcod

    2024年02月05日
    浏览(49)
  • flutter学习-day2-认识flutter

    本文学习和引用自《Flutter实战·第二版》:作者:杜文 Flutter 是 Google 推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter 提供了丰富的组件、接口,开发者可以很快地为 Flutter 添加

    2024年02月04日
    浏览(43)
  • 【Node.js学习 day2——预备知识】

    1、概念 Buffer是一个类似于数组的对象,用于表示固定长度的字节序列 Buffer本质是一段内存空间,专门用来处理二进制数据 2、特点 Buffer大小规定且无法调整 Buffer性能较好,可以直接对计算机内存进行操作 每个元素的大小为1字节(byte) 3、使用 创建Buffer(3种方式) 4、 B

    2024年01月25日
    浏览(46)
  • MetaGPT-打卡-day2,MetaGPT框架组件学习

    今天是第二天的打卡~昨天是关于一些概念的大杂烩,今天的话,就来到了Hello World环节。 从单个Agnet到多个Agent,再到组合更复杂的工作流来解决问题。 虽然看过了一些资料,但是还是有些不知道该怎么去理解Agent的概念。从单词本身的翻译来看,很多都是经纪人、代理人的

    2024年01月19日
    浏览(46)
  • 【零基础??天速成 Java】Day2 - 初识面向对象

    目录 前言 1. 可变参数的使用 2. 构造器 3. 包 1、包的创建 2、包的使用 3、包的命名规范 4、常用的包 5. 访问修饰符 6. 继承  7. super 8. 方法重写 Override 写在最后: 我的 java 基础学习,跟的是韩顺平的 java 课程~ 本篇文章涵盖视频 216 ~ 305 集里面 java 与 C++ 不同的知识

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包