【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,不允许直接访问,提高了安全性

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu搭建wifi热点,共享网络(x86、arm相同)

目录 1 首先检查网络管理器服务是否开启 (ubuntu需要界面) 2 创建并配置需要共享的wifi 首先,明确下这篇文章说的是啥,是为了在ubuntu系统的电脑上,搭建一个wifi热点,供其他移动设备连接上网。就像你…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能(WAI-ARIA、第 508 节/WCAG 合规性)、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

Linux常用命令大全

目录操作 切换目录 cd 查看目录 ls -l 列出文件详细信息 或者直接ll-a 列出当前目录下所有文件及目录,包括隐藏的a(all) 创建目录 mkdir -p 创建目录,若无父目录,则创建p(parent) 输出信息 echo 打印文件到命令行(查看文件) cat 改变…

stm32与上位机电脑间最快的通信方式是什么?

对于小型多关节机械臂的控制电路设计,选择合适的通信方式可以提高MCU与上位机之间的实时性。以下是一些在STM32上常用的通信方式,你可以根据你的具体需求选择适合的: 串口通信(UART):串口通信是一种常见的…

【stm32】初识stm32—stm32环境的搭建

文章目录 🛸stm32资料分享🍔stm32是什么🎄具体过程🏳️‍🌈安装驱动🎈1🎈2 🏳️‍🌈建立Start文件夹 🛸stm32资料分享 我用夸克网盘分享了「STM32入门教程资料…

【单片机】51单片机串口的收发实验,串口程序

这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数…

关于eclipse导入部署具有增删改查的项目

目录 前言:当我们刚刚进入公司的第一步就是去部署当前公司的项目,本博客就是详细介绍怎么去部署当前公司的项目。 一,开发工具: 二,具体步骤: 2.1导入公司的项目 打开eclipse开发工具 2.2配置当前的环…

下载网络文件到本地

文章目录 目录 前言 操作步骤 1.引入 2.读取出文件内容 3.筛选出URL 4.下载表情包 总结 前言 这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。 一、操作步骤 1.引入 首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在…

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

蓝桥杯上岸每日N题第八期(全球变暖)!!! 同步收录 👇 蓝桥杯上岸必背!!!(第五期BFS) 大家好 我是寸铁💪 冲刺蓝桥杯省一模板大全来啦 🔥 蓝桥杯4月8号就要开始了 &am…

MAPPO 算法的深度解析与应用和实现

【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明: 来源:36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章,质量有保障&…

黑马机器学习day2

1.1sklearn转换器和估计器 转换器和预估器(estimator) 1.1.1转换器 实例化一个转换器类 Transformer调用fit_transform() 转换器调用有以下几种形式: fit_transformfittransform 1.1.2估计器 在sklearn中,估计器是一…

uni——月份选择(横向滑动tab,横向滚动选择日期)

案例展示 案例代码 已封装成组件使用 <template><view><view class"tabBox"><scroll-view scroll-x"true" :scroll-left"scrollLeft" :scroll-with-animation"true"><view class"box"><…

[excel]vlookup函数对相同的ip进行关联

一、需求&#xff08;由于ip不可泄漏所以简化如下&#xff09; 有两个sheet: 找到sheet1在sheet2中存在的ip&#xff0c;也就是找到有漏洞的ip 二、实现 vlookup函数有4个参数 第一个:当前表要匹配的列&#xff0c;选择第一个sheet当前行需要处理的ip即可 第二个:第二个shee…

北京多铁克FPGA笔试题目

1、使用D触发器来实现二分频 2、序列检测器&#xff0c;检测101&#xff0c;输出1&#xff0c;其余情况输出0 module Detect_101(input clk,input rst_n,input data, //输入的序列output reg flag_101 //检测到101序列的输出标志 );parameter S0 2d0;S1 2d1;S2 2d2;S4 …

ThingJS开发使用感受

封面来源于网络。 一、前言 1. 背景 出于为了实现有关厂区的数字孪生项目&#xff0c;断断续续使用ThingJS平台开发一年左右&#xff0c;做一个使用感受的总结。 2. 业务场景 开发一个基于厂区的数字孪生项目&#xff0c;基于ThingJS低代码开发的页面分为div3d、div2d结构&am…

rust关于项目结构包,Crate和mod和目录的组织

rust 最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下 rust关于包&#xff0c;Crate 关于包&#xff0c;Crate这块先看看官方书籍怎么说的 crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…

直线模组在AGV物流设备起什么作用?

在物流产业高速发展的今天&#xff0c;机器人技术的应用程度已经成为决定企业间相互竞争和未来发展的重要衡量因素。智能机器人运用到物流产业&#xff0c;其效率不言而喻。AGV智能仓储作为现代物流系统的重要组成部分&#xff0c;物流自动化、智能化不光是能提升效率和安全性&…

【JavaEE】懒人的福音-MyBatis框架—介绍、搭建环境以及初步感受

【JavaEE】MyBatis框架要点总结&#xff08;1&#xff09; 文章目录 【JavaEE】MyBatis框架要点总结&#xff08;1&#xff09;1. MyBatis是什么&#xff1f;2. 搭建MyBatis的开发环境2.0 MySQL建库建表2.1 新项目添加MyBatis框架2.2 设置MyBatis的配置2.2.1 设置数据库的连接信…

U8g2 驱动oled自定义中文字库

原文&#xff1a;Arduino驱动LED128X64 - U8g2 参考&#xff1a; Arduino通过u8g2库驱动OLED适合 u8g2 的中文字体&#xff0c;采用文泉驿点阵宋体作为源本&#xff0c;提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。 本文所需工具下载 我们在项目中大概率会遇到LED显示…

Unity3d C#利用本地网页快速打开萤石云监控视频流(ezopen)实现云台,声音等控制,支持WebGL平台,替代UMP播放(含源码)

前言 之前我介绍了替代Universal?Media?PlayerUMP播放石云监控视频流(ezopen)的功能&#xff0c;效果还是很明显的&#xff0c;笔者的测试是差不多3-5秒就能打开监控画面&#xff0c;不过稍微遗憾的是&#xff0c;之前的功能是iframe打开石云提供的播放网页的形式&#xff0…