当前位置: 首页 > news >正文

3.primitive主数据类型和引用 认识变量

3.1 声明变量

Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧?并且它也不会让你将浮点数类型变量放进整数类型的变量中,除非你先跟编译器确认过数字可以损失掉精确度(例如说舍去所有的小数值)。

编译器会指出大部分的问题:
Rabbit hopper = new Giraffe();
这样的程序过不了编译器这关。

为了要让类型安全能够发挥作用,必须声明所有变量的类型,指定它是个int类型或是个Dog类型。变量有两种口味:清凉的primitive主数据类型与香辣的对象引用。primitive主数据类型用来保存基本类型的值,包括整数、布尔和浮点数等。而对象引用保存的是对象的引用。

先记住下面这条声明变量的规则:
variables must have a type
变量必须拥有类型。另一条规则是必须要有名称。
variables must have a name—

int count;
类型 名称

注意:当你读到“X 类型的 Y 对象”时,类型(type)此时与类是相通的同义字。

3.2 Primitive主数据类型

变量就像是杯子,是一种容器,承装某些事物。

primitive主数据类型

类型   位数   值域

boolean与char

boolean  (Java虚拟机决定)  true或false

char   16 bits   0~65535

数值(带正负号)

integer

byte   8 bits   -128 ~ 127

short   16 bits   -32768 ~ 32767

int   32 bits   -2147483648 ~ 2147483647

long   64 bits   -很大 ~ +很大   

浮点数

float   32 bits   范围规模可变

double   64 bits   范围规模可变

primitive主数据类型的声明与赋值声明

int x;

x = 234;

byte b = 89;

boolean isFun = true;

double d = 3456.98;

char c = 'f';

int z = x;

boolean isPunkRock;

isPunkRock = false;

boolean powerOn;

powerOn = isFun;

long big = 3456789;

float f = 32.5f;

除非加上f,否则所有带小数点的值都会被Java当作double处理

当心溢出,要确保变量能存下所保存的值

编译器不允许将大变量赋值给小变量,但是反过来可以

3.3 Java关键字

类、方法、变量命名规则:

  • 名称必须以字母、下划线(_)或$符号开头,不能用数字开头
  • 除了第一个字符之外,后面就可以用数字
  • 避开Java的保留字

3.4 引用变量

  • 事实上没有对象变量这样的对象存在
  • 只有引用(reference)到对象的变量
  • 对象引用变量保存的是存取对象的方法
  • 它并不是对象的容器,二十类似指向对象的指针。或者可以说是地址。但在Java中我们不会也不该知道引用变量中实际装载的是什么,它只是用来代表单一的u对象。只有Java虚拟机才会知道如何使用引用来取得该对象。

无法将对象装进变量中

虽然primitive主数据类型变量是以字节来代表实际的变量值,但对象引用变量却是以字节来表示取得对象的方法

使用圆点运算符(.)来对引用变量表示,取得圆点前面的对象,然后求出该对象在圆点后面的事物。

3.5 对象的声明与赋值

对象引用也只是个变量值,还是会有东西放进杯子中,只是引用所放进去的是遥控器

Primitive主数据类型变量

byte x = 7;

代表数值7的字节被放进变量中(00000111)

引用变量

Dog myDog = new Dog();

代表取得Dog对象的方法以字节形式放进变量中,对象本身并没有放进变量中

对primitive主数据类型中的变量来说,变量值就是所代表的值(如5、-26.7或a’)。对引用变量来说,变量值是取得特定对象的位表示法。 

1.声明一个引用变量

Dog myDog = new Dog();

要求Java虚拟机分配空间给引用变量,并将此变量命名为myDog。此引用变量将永远被固定为Dog类型。换句话说,它是个控制Dog的遥控器,不会是Cat或皮卡丘的遥控器。

2.创建对象

Dog myDog = new Dog();

要求Java虚拟机分配堆空间给新建立的Dog对象

3.连接对象和引用

 Dog myDog = new Dog();

将新的Dog赋值给myDog这个引用变量,换言之就是设定遥控器

3.6 可回收堆空间

1.在垃圾收集堆上的生活

Book b = new Book();

Book c = new Book();

声明两个Book的引用变量并创建两个Book对象,然后将Book对象赋值给引用变量。现在这两个Book对象生活在堆上。

引用数:2

对象数:2

Book d = c; 

声明新的Book引用变量,但不创建新的Book变量而将变量c的值赋给值给变量d。这代表“将c的字节组合拷贝给变量d”

c与d引用到同一对象

相同值的两份拷贝,一台电视两个遥控器。

引用数:3

对象数:2

c = b;

把变量b的值赋给变量c。变量b的字节组合被拷贝一份给c

b与c两者都引用相同的对象 

引用数:3

对象数:2

2.堆上的生与死

Book b = new Book();

Book c = new Book();

声明两个Book的引用变量并创建两个Book对象,然后将Book对象赋值给引用变量。现在这两个Book对象生活在堆上。

引用数:2

对象数:2

b = c;

把变量c的值赋给变量b,两者带有相同的值。

对象1被抛弃且能够作垃圾收集器(GC)。

引用数:2

对象数:2

被抛弃对象数:1

对象1已经没有引用,变成无法存取的。

c = null; 

将null值赋给c。这代表它不再引用任何事物,但还是个可以被指定引用其他Book的引用变量

对象2还引用到,所以不能够作垃圾收集器(GC)

作用中的引用数:1

null引用数:1

可存取对象数:1

被抛弃对象数:1

3.7 数组

数组犹如杯架

1.声明一个int数组变量。数组变量是数组对象的遥控器

int[] nums;

2.创建大小为7的数组,并将它赋值给之前声明为int[]的变量nums

nums = new int[7];

3.赋予int数组的每一个元素一个int值。在int数组中的每个元素皆为int类型的变量

nums[0] = 6;

nums[1] = 19;

nums[2] = 44;

nums[3] = 42;

nums[4] = 10;

nums[5] = 20;

nums[6] = 1;

数组也是对象,不论被声明来承载的是primitive主数据类型或对象引用

Java的标准函数库包含了许多复杂的数据结构,比如map、tree和set(见附录B),但如果需要快速、有序、有效率地排列元素时,数组是不错的选择。数组能够让你使用位置索引来快速、随机地存取其中的元素。

数组中的每个元素都是变量。换言之,会是8种primitive主数据类型变量中的1种,不然就是引用变量。可以放进该类型变量中的值都可以当作此类型数组的元素。所以在int类型的数组中,每个元素可以装载一个int。所以在Dog的数组中(Dogll)每个可以装载一个Dog吗?错,要记得引用变量只会保存引用,而不是对象本身。因此Dog数组的元素持有的是Dog的遥控器。当然啦,我们还得创建Dog对象。

创建Dog数组

1.声明一个Dog数组变量

Dog[] pets;

2.创建大小为7的Dog数组,并赋值给前面所声明出的Dog[]类型变量pets

pets = new Dog[7];

3.创建新的Dog大小并将他们赋值给数组的元素。

pets[0] = new Dog();

pets[1] = new Dog();

控制Dog(通过引用变量)

Dog fido = new Dog();

fido.name = "Fido";

我们创建出Dog对象并使用圆点运算符来操作引用变量fido并存取它的name变量。
我们可以运用fido这个引用来让Dog执行bark()或其他的方法。
fido.bark();

fido.chaseCat();

如何存取Dog数组中的Dog

对数组的操作可以不需要变量名称,只需要数组索引(位置)就可以操作特定对象

Dog[] myDogs = new Dog[3];

myDogs[0] = new Dog();

myDogs[0].name = "Fido";

myDogs[0].bark();

Java注重类型
一旦数组被声明出来,你就只能装入所声明类型的元素。

举例来说,你不能将Cat放到Dog数组中(如果有人尝试要让数组中的每个元素都汪汪叫一次会出现什么状况?)。double也不能放进int数组中。但是你可以将byte放进int的数组中,因为byte可以放进int尺寸的杯子中。这被称为隐含展开(implicit widening,稍后会有更多的说明,现在只需要注意编译器会根据数组所声明的类型来防止错误的类型)。

public class Dog {String name;public static void main(String[] args) {//创建Dog对象Dog dog1 = new Dog();dog1.bark();dog1.name = "Bart";//创建Dog数组Dog[] myDogs = new Dog[3];//关门放狗myDogs[0] = new Dog();myDogs[1] = new Dog();myDogs[2] = dog1;//通过数组引用存取DogmyDogs[0].name = "Fired";myDogs[1].name = "Marge";//myDog[2]的名字是System.out.print("last dog's name is ");System.out.println(myDogs[2].name);//逐个对Dog执行bark()int x = 0;while (x < myDogs.length) {myDogs[x].bark();x = x + 1;}}public void bark() {System.out.println(name + " says Ruff!");}public void eat() { }public void chaseCat() { }
}

相关文章:

3.primitive主数据类型和引用 认识变量

3.1 声明变量 Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧&#xff1f;并且它也不会让你将浮点数类型变量放进整数类型的变量中&#xff0c;除非你先跟编译器确认过数字…...

【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 光学显微镜算法&#xff08;OMA&#xff09;1.1 物镜放大倍数1.2 目镜放大倍数 2. 改进后的IOMA算法2.1 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节&#xff1a;…...

第三课-软件升级-Stable Diffusion教程

前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…...

【C++】设计模式之——建造者

建造者模式概念模拟实现建造者模式代码实现 建造者模式 首先先大体了解一下&#xff0c;建造者模式是什么意思&#xff0c;它是怎么实现的&#xff1f; 首先&#xff0c;建造者模式是一种创建型设计模式再一个它是使用多个简单的对象一步一步的搭建出一个复杂的对象它可以将一个…...

【C++】基础语句(学习笔记)

一、分支 1、三种基本结构 顺序结构分支结构循环结构 2、if与switch对比 1&#xff09;使用场景 switch只支持常量值固定相等的分支判断if可以判断区间范围用switch能做的&#xff0c;用if都能做 2&#xff09;性能比较 分支少时&#xff0c;差别不是很大。分支多时&…...

大厂秋招真题【DP】米哈游20230924秋招T2-米小游与魔法少女-奇运

米哈游20230924秋招T2-米小游与魔法少女-奇运 题目描述与示例 题目描述 米小游都快保底了还没抽到希儿&#xff0c;好生气哦&#xff01;只能打会活动再拿点水晶。 米小游和世界第一可爱的魔法少女 TeRiRi 正在打 BOSS&#xff0c;BOSS 的血量为h&#xff0c;当 BOSS 血量小…...

LVS+Keepalived 高可用集群负载均衡

一.keepalived介绍 1.1.Keepalived实现原理 由多台路由器组成一个热备组&#xff0c;通过共用的虚拟IP地址对外提供服务。 每个热备组内同时只有一台主路由器提供服务&#xff0c;其他路由器处于冗余状态。 若当前在线的路由器失效&#xff0c;则其他路由器会根据设置…...

Qt QList类和QLinkedList类 详解

一、QList 类 对于不同的数据类型&#xff0c;QList<T>采取不同的存储策略&#xff0c;存储策略如下&#xff1a; 如果T 是一个指针类型或指针大小的基本类型(该基本类型占有的字节数和指针类型占有的字节数相同)&#xff0c;QList<T>将数值直接存储在它的数组当…...

Mac安装GYM遇到的一些坑

以下是遇到的一些问题 安装GitHub上说的直接 pip install gym成功了&#xff0c;但是运行实例报错没安装gym[classic_control]&#xff0c;所以就全安装一下[all] 安装GitHub上说的直接 pip install gym成功了&#xff0c;但是运行实例报错没安装gym[classic_control]&#xff…...

【高级rabbitmq】

文章目录 1. 消息丢失问题1.1 发送者消息丢失1.2 MQ消息丢失1.3 消费者消息丢失1.3.1 消费失败重试机制 总结 2. 死信交换机2.1 TTL 3. 惰性队列3.1 总结&#xff1a; 4. MQ集群 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息丢失问题 1.1…...

数百个下载能够传播 Rootkit 的恶意 NPM 软件包

供应链安全公司 ReversingLabs 警告称&#xff0c;最近观察到的一次恶意活动依靠拼写错误来诱骗用户下载恶意 NPM 软件包&#xff0c;该软件包会通过 rootkit 感染他们的系统。 该恶意软件包名为“node-hide-console-windows”&#xff0c;旨在模仿 NPM 存储库上合法的“node-…...

SpringBoot的error用全局异常去处理

记录一下使用SpringBoot2.0.5的error用全局异常去处理 在使用springboot时&#xff0c;当访问的http地址或者说是请求地址输错后&#xff0c;会返回一个页面&#xff0c;如下&#xff1a; 这是因为请求的地址不存在&#xff0c;默认会显示error页面 但我们实际需要一个接口&a…...

MyBatisPlus(十一)包含查询:in

说明 包含查询&#xff0c;对应SQL语句中的 in 语句&#xff0c;查询参数包含在入参列表之内的数据。 in Testvoid inNonEmptyList() {// 非空列表&#xff0c;作为参数List<Integer> ages Stream.of(18, 20, 22).collect(Collectors.toList());in(ages);}Testvoid in…...

Linux命令定位与查找:which、whereis和find的用法详解

文章目录 Linux命令的定位与查找1. 简介Linux路径环境变量命令行和Shell 2. which命令which命令的作用使用which命令定位可执行文件多个可执行文件的定位which命令的选项及其使用 3. whereis命令whereis命令的作用使用whereis命令查找二进制文件查找源代码文件whereis命令的选项…...

LeetCode 面试题 17.10. Find Majority Element LCCI【摩尔投票法】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

多校联测11 模板题

题目大意 给你四个整数 n , m , s e e d , w n,m,seed,w n,m,seed,w&#xff0c;其中 n , m n,m n,m为两个多项式 A ( x ) ∑ i 0 n a i x i A(x)\sum\limits_{i0}^na_ix^i A(x)i0∑n​ai​xi和 B ( x ) ∑ i 0 m b i x i B(x)\sum\limits_{i0}^mb_ix^i B(x)i0∑m​bi​xi…...

Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)

1 SSH简介 SSH&#xff08;Secure Shell&#xff0c;安全外壳&#xff09;是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式&#xff0c;例如Telnet、FTP&#xff0c;使用明文传输数据&#xff0c;存在很多的安全…...

从0开始python学习-30.selenium frame子页面切换

目录 1. frame切换逻辑 2. 多层子页面情况进行切换 3. 多个子页面相互切换 1. frame切换逻辑 1.1. 子页面的类型一般分为两种 frame标签 iframe标签 1.2. 子页面里面的元素和主页面的元素是相互独立 子页面元素需要进去切换才能操作 如果已经进入子页面&#xff0c;那么…...

asp.net core 远程调试

大概说下过程&#xff1a; 1、站点发布使用Debug模式 2、拷贝到远程服务器&#xff0c;以及iis创建站点。 3、本地的VS2022的安装目录&#xff1a;C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE下找Remote Debugger 你的服务器是64位就拷贝x64的目…...

Java spring boot 一次调用多个请求

Java Spring Boot是一种基于Java编程语言的开发框架&#xff0c;它提供了一种快速构建高效、可伸缩和易于维护的企业级应用程序的方式。在实际的应用开发中&#xff0c;我们常常需要调用多个独立的请求来完成某个业务功能。然而&#xff0c;传统的同步方式一次只能调用一个请求…...

DRM全解析 —— CRTC详解(4)

接前一篇文章&#xff1a;DRM全解析 —— CRTC详解&#xff08;3&#xff09; 本文继续对DRM中CRTC的核心结构struct drm_crtc的成员进行释义。 3. drm_crtc结构释义 &#xff08;21&#xff09;struct drm_object_properties properties /** properties: property tracking …...

六个为Rust构建的IDE

Rust语言的学习曲线适中&#xff0c;介于高级语言和低级语言之间。这门语言既能编写系统软件&#xff0c;将嵌入式设备编译为x86 ARM&#xff0c;也可以用于前端技术&#xff0c;这要归功于WebAssembly。 在日渐成熟的发展中&#xff0c;Rust开始拥有更好的工具来提高效率。最…...

25 Python的collections模块

概述 在上一节&#xff0c;我们介绍了Python的sqlite3模块&#xff0c;包括&#xff1a;sqlite3模块中一些常用的函数和类。在这一节&#xff0c;我们将介绍Python的collections模块。collections模块是Python中的内置模块&#xff0c;它实现了特殊的容器数据类型&#xff0c;提…...

JEPG Encoder IP verilog设计及实现

总体介绍: 采用通用的常规 Verilog 代码编写,可用于任何 FPGA。 该内核不依赖任何专有 IP 内核,而是用 Verilog 编写了实现 JPEG 编码器所需的所有功能,代码完全独立。 编码器内核的输入是一条 24 位数据总线,红色像素、绿色像素和蓝色像素各有 8 位。 信号 "data_i…...

yolov5 web端部署进行图片和视频检测

目录 1、思路 2、代码结构 3、代码运行 4、api接口代码 5、web ui界面 6、参考资料 7、代码分享 1、思路 通过搭建flask微型服务器后端&#xff0c;以后通过vue搭建网页前端。flask是第一个第三方库。与其他模块一样&#xff0c;安装时可以直接使用python的pip命令实现…...

嵌入式养成计划-34--函数库

七十二、 函数库 1. 库的概念 库是一个二进制可执行文件&#xff0c;与二进制可执行程序比较&#xff0c;库是不能单独运行的。 库中存放的是功能函数&#xff0c;没有主函数&#xff08;main函数&#xff09; 库需要被载入到内存中使用 标准的基础库中存放了很多已经写好的…...

PM864AK01-eA 3BSE018161R2 工业人工智能供应链先驱

PM864AK01-eA 3BSE018161R2 工业人工智能供应链先驱 吞吐量和Macnica Networks的战略合作伙伴关系将使Macnica Networks的客户能够加速和量化智能工厂计划的投资回报(ROI)。高管、经理和运营负责人可以使用Macnica Networks领先的制造场所数据收集平台和ThroughPut基于约束理论…...

参与现场问题解决总结(Kafka、Hbase)

一. 背景 Kafka和Hbase在现场应用广泛&#xff0c;现场问题也较多&#xff0c;本季度通过对现场问题就行跟踪和总结&#xff0c;同时结合一些调研&#xff0c;尝试提高难点问题的解决效率&#xff0c;从而提高客户和现场满意度。非难点问题&#xff08;历史遇到过问题&#xf…...

基于PSD-ML算法的语音增强算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.加窗处理&#xff1a; 2.分帧处理&#xff1a; 3.功率谱密度估计&#xff1a; 4.滤波处理&#xff1a; 5.逆变换处理&#xff1a; 6.合并处理&#xff1a; 5.算法完整程序工程 1.算法…...

【1++的Linux】之文件(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;初识文件二&#xff0c;文件接口 一&#xff0c;初识文件 文件就是文件内容属性。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。 我们访问…...

如何做视频网站技术指标/外链价格

随着区块链技术从概念到落地的发展趋势&#xff0c;从2017年开始区块链技术已经有了初步的与现实商业场景结合的可能&#xff0c;这个热度在2018年升到顶端&#xff0c;区块链技术在全球开始部署应用。而2018年的中国&#xff0c;舆论和资本在区块链领域双管齐下&#xff0c;各…...

温岭建设规划局网站/网站产品怎么优化

下面是禁止移动端滑动事件的方式&#xff0c;慎用 document.querySelector(body).addEventListener(touchmove, function (ev) {event.preventDefault();});转载于:https://www.cnblogs.com/songdongdong/p/6739701.html...

南昌企业建站/seo课程培训

题面 \(Solution:\) 一开始想的是先跑一遍最短路&#xff0c;然后拆点之后再跑一遍&#xff0c;比较两次dis&#xff0c;然后发现拆点后会有负环(可能是我没想对拆点的方法)&#xff0c;于是就放弃了拆点法。 我们考虑强制让每头牛选择走一条最短的&#xff0c;有草堆的路径&am…...

有没有专门做翻译的网站/最近的重要新闻

原文地址&#xff1a;http://jason61719.blog.163.com/blog/static/11417604120106325114274/ 一、Eclipse,MyEclipse安装插件方法大全(dropins) 使用eclipse&#xff0c;最看重的还是它的插件数量比较多&#xff0c;使用起来比较方便&#xff0c;但是大多数人对eclipse的插件…...

pc端网站未来/进入百度首页

在进行字符串分析时&#xff0c;还经常需要对字符串进行分割和连接处理&#xff0c;同样有两种处理函数&#xff0c;复杂的字符串分割&#xff0c;可以使用正则表达式的分割函数preg_split()按模式对字符进行分割&#xff0c;简单的字符串分割处理&#xff0c;就需要使用字符串…...

郑州品牌网站建设/竞价系统

有媒体报道&#xff1a;截至2010年12月底&#xff0c;中国移动3G用户总数2070.2万户。而在新增用户方面&#xff0c;中移动2010年12月份新增3G用户186.7万户&#xff0c;较2010年11月有大幅下降。2010年11月&#xff0c;中国移动新增3G用户298万。看到这则消息我笑了&#xff0…...