【cs61b】学习笔记day2

历史文章目录

【cs61b】学习笔记day1


文章目录

  • 历史文章目录
  • List
    • 两个小问题
    • bits
    • 声明一个变量
    • 引用类型
    • 方框和指针表示法
    • 数组的实例化
    • 链表
  • SLList


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);

在这里插入图片描述
在这里插入图片描述

从下图可以看出,a和b指向的同一个实例,而x和y是两个独立的
在这里插入图片描述

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表示它。
非零地址将由指向对象实例化的箭头表示。

在这里插入图片描述
在这里插入图片描述
下面来解释最开头的问题,为什么a和b是一样的

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

第一行执行完毕,我们得到下面的:
在这里插入图片描述

第二行执行完,得到下面的图片:
在这里插入图片描述
根据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增加了头节点
在这里插入图片描述
关于public和private,我们一般把类中的属性设置为private,不允许直接访问,提高了安全性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/66788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

43.字符串相乘

目录 一、题目 二、代码 一、题目 43. 字符串相乘 - 力扣(LeetCode) 二、代码 class Solution { public: string addStrings(string num1, string num2)//求两个字符串相加 {int end1 num1.size() - 1;int end2 num2.size() - 1;int next 0;//进位…

windows 10 远程桌面配置

1. 修改远程桌面端口(3389) 打开注册表(winr), 输入regedit 找到配置项【计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Wds\rdpwd\Tds\tcp】 , 可以通过搜索“Wds”快速定位。 修改端口配…

PHPExcel单独设置(高亮)单元格部分文字字体颜色 导出文件(两种方法)

public function exportData(){ $objPHPExcel new \PHPExcel();//创建一个富文本对象$objRichText new \PHPExcel_RichText();$objRichText->createText(铁扇公主);//需要改变大小或颜色的文字内容$objPayable $objRichText->createTextRun(芭蕉妹妹);//设置加粗$objP…

Python-OpenCV中的图像处理-图像梯度

Python-OpenCV中的图像处理-图像梯度 图像梯度Sobel 算子和 Scharr 算子Laplacian 算子 图像梯度 图像梯度,图像边界等使用到的函数有: cv2.Sobel(), cv2.Scharr(), cv2.Laplacian() 等原理:梯度简单来说就是求导。Op…

[保研/考研机试] 括号匹配问题 C++实现

题目描述: 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来的字符串&am…

MachineLearningWu_14/P65-P69_Multiclass

x.1 Multiclass多分类问题 对于分类问题,往往指的是二分类问题,而对于二分类的decision boundary较为简单,而实际生活中会有很多问题是多分类问题,例如MNIST手写数字识别, 从特征空间上来看,二分类和多分类…

SpringCloud 尚硅谷 微服务简介以及Eureka使用

写在前面 该系列博客仅用于本人学习尚硅谷课程SpringCloud笔记,其中的错误在所难免,如有错误恳请指正。 官方源码地址:https://github.com/zzyybs/atguigu_spirngcloud2020 什么是SpringCloud Spring Cloud是微服务一站式服务解决方案&…

Segment Anything(SAM) 计算过程

给定输入图像 I ∈ R 3 H W I \in R^{3 \times H \times W} I∈R3HW。给定需要的prompts: M ∈ R 1 H W M \in R^{1 \times H \times W} M∈R1HW,代表图片的前背景信息。 P ∈ R N 2 P \in R^{N \times 2} P∈RN2,其中 N N N 是点的个数…

活动发布会邀请媒体6步走

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 邀请媒体参加活动发布会对信息的传播,企业品牌建设有诸多的好处,今天就与大家分享下邀请媒体参加活动报道的6个步骤: 1. 策划与准备: -明…

vue3 - 使用reactive定义响应式数据进行列表赋值时,视图没有更新的解决方案

文章目录 1,问题2,原因3,解决方案一、再封装一层数据,即定义属性名,在后期赋值的时候,对此属性进行直接赋值三、使用数组的splice来直接更改原数组三、使用 ref 来定义数据 1,问题 在Vue 3.0 中…

ThreadLocal

# ThreadLocal # ThreadLocal 有什么用? 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中自带的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要…

Vue+Vue Router+TailwindCss+Daisyui部署

一、构建Vue项目 > npm init vuelatest > cd <your-project-name> > npm install > npm run dev 二、设置IDEA JS版本 三、安装Tailwindcss Install Tailwind CSS with Vite - Tailwind CSS npm install -D tailwindcss postcss autoprefixer npx tai…

Titanic细节记录一

目录 chunker header index_col names Series与DataFrame的区别 df.columns del和drop的区别 reset_index loc与iloc的区别 不同的排序方式 sort_values sort_index DataFrame相加 describe函数查看数据基本信息 查看多个列的数据时使用列表 处理缺失值的几种思路 …

【Kubernetes】Kubernetes之kubectl详解

kubectl 一、陈述式资源管理1. 陈述式资源管理方法2. 基本信息查看3. 项目周期管理3.1 创建 kubectl create 命令3.2 发布 kubectl expose命令3.3 更新 kubectl set3.4 回滚 kubectl rollout3.5 删除 kubectl delete 4. kubectl 的发布策略4.1 蓝绿发布4.2 红黑发布4.3 灰度发布…

代码随想录算法训练营第24天| 第七章 回溯算法part01 理论基础、leetcode 77

Part I : 回溯算法基础 背景&#xff1a;一直以来都是半懂不懂的&#xff0c;在逻辑上不难&#xff0c;毕竟属于暴力搜索&#xff1b;在代码上就开始缠绕起来了&#xff0c;自己研究的时候对N皇后问题老是理不清。这次终于在Carl这开始前进啦&#xff01;何为回溯算法&#xf…

爬虫012_字典高级操作_查询_修改_添加_删除和清空_遍历---python工作笔记031

然后来看字典高级,首先 打印某个元素 然后打印的时候注意,如果直接打印的值,在字典中没有就报错 这里要注意不能用点访问

Redis类型检查与命令多态

Redis中用于操作键的命令基本上可以分为两种类型。 其中一种命令可以对任何类型的键执行&#xff0c;比如说DEL命令、EXPIRE命令 、RENAME命令、TYPE命令、OBJECT命令等。 举个例子&#xff0c;以下代码就展示了使用DEL命令来删除三种不同类型的键: # 字符串键 redis> SE…

基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................... %fine regular gr…

ApplicationContextInitializer

目录 在何处执行&#xff1f;何时初始化&#xff1f;自己写一个ApplicationContextInitializer 那这个类的设计具体有什么作用呢&#xff1f;&#xff1f;1. DelegatingApplicationContextInitializer2. SharedMetadataReaderFactoryContextInitializer3. ContextIdApplication…

灰度均衡变换之c++实现(qt + 不调包)

1.基本原理 灰度均衡是以累计分布函数变换为基础的直方图修正法&#xff0c;它可以产生一副灰度级分布概率均匀的图像。也就是说&#xff0c;经过灰度均衡后的图像在没一级灰度上像素点的数量相差不大。公式见下图&#xff0c;为灰度值为x的像素点的个数&#xff0c;n为总像素点…