2.变量和数据类型

变量

上一节课中,我们看到了1 + 1中的1是常量,那么,如果我有一个电子钱包,钱包里的钱是变化的,我该怎么来用程序表达它呢?
这时候,我们就需要增加一个变量的概念,让我们可以动态地保存修改数值

好,再来举个例子:往银行里存款。
当我们去取款的时候,银行如何能找到我们的存款呢?

大家想一想,第一次去银行,我们是不是要先办张卡啊,这个卡对应着我们的账户,有了这个账户,我们才能安心地往里面存钱,确保我的钱没存到别人的账户里去,对吧。

我们可以把银行想象成一台计算机或者电脑,银行里是不是有很多的银行账户啊,电脑的内存里也有很多的地址,每一个地址都对应着一个存储单元,可以用来存放数据。那么,我们的银行卡是不是就像电脑内存中的地址呢,那么通过这个地址,就可以轻松地存取我们的数据啦。

那么实际中内存的地址是像这样的:0xFFFF015F
这样的地址对于人类来说太不友好了,而且在不同的运行环境下,地址还会变化。
那我们就需要有一个更加方便的东西来便于我们使用,这就是变量名。
给变量取个名字不就完事了嘛~

来,看一看变量长啥样:

int a = 1;

a 就是一个变量,它被设计用来存放什么类型的数据呢?我们看到 a 的前面有一个 int 关键字,这个就是用来限定变量 a 所能存放的数据类型:整数型。
那么在赋值符号 = 后面能放小数类型吗?能放字符类型吗? 显然不能。
这个1就是变量 a 的初识值,它是一个整数。

我们再来回顾一下,一个变量的定义是由哪些组成:

image

房间可以看作一个变量
房间有门牌号,例如302,这个可以看作变量名
房间可以有单人间,双人间,还有总统套房等不同类型,可以看作变量的类型
入住的客人,可以看作变量值

那么,我们通过变量名就能简单快速地找到数据。

命名规则

1. 不能使用关键字
2. 可以由字母、下划线、$、¥、汉字、数字组成,但必须以字母、下划线、$、¥、汉字开头,不能以数字开头。
3. 使用驼峰命名规范

常用数据类型

整型、浮点型、非数值型

每种类型都有它的界限:取值范围

例如 byte,1个字节,在计算机是8个bit(比特),我们用二进制来表示的话:0000 0000 到 1111 1111
由于byte是有正负的,所以,我们把最高位当作符号位,剩下来的7位作为数据位,那么它能存储的负数值就是 2的7次方 = -128 ~ -1,一共128个数,正数值就是1 ~ 127,一共127个数,外加一个0,刚好128个数。正负零,合起来一共256个数。
那么它的取值范围就是 - 2的7次方 ~ 2的7次方 - 1,也就是 -128 ~ 127了。

变量的申明和使用

  1. 声明或者定义一个变量,根据数据类型,在内存中申请地址和空间;

    int money;

  2. 赋值,将数据存储到对应的地址空间中去;

    money = 1000;

  3. 以上也可以合成一步:

    int money = 1000;

  4. 使用变量

    int total = money + 100;
    System.out.println("Money: " + money);
    System.out.println("Total: " + total);
    

小练习

使用变量完成以下操作:
输出Java课考试最高分的学员信息及分数,例如:

本次Java课考试最优学员为:张三
性别:男
成绩:98.5

常量

说完了变量,我们来说一说Java中的常量如何定义和使用。

每一门语言的常量和变量的定义并非完全一致,在学习新语言的过程中要注意分辨和记忆。

我们在变量前加上一个关键字 final,代表这是不可修改的最终值,那么也就是常量的意思。
一旦加上该关键字,常量在后面的使用过程中都是不允许修改的。

那么它的优点是:不会被他人修改,这一点在团队协作开发时至关重要,我们的同学将来毕业后去工作,很多时候不是单打独斗,是要团队协作的,如何保证自己开发的模块,被他人正确地使用,靠一张嘴来说可不行,比如你定义了一个变量,到处跟人讲,不要修改它啊,运行时修改了会发生不可预料的后果。那如果别人忘了怎么办,甚至换人了怎么办?如何强制对方绝对不能修改呢,这就需要使用 final 关键字来修饰,定义成常量,这样别人编写代码时,在编译阶段就无法通过,那么他就知道,这个值不能修改,大大降低了沟通成本,确保了自己所开发模块的安全可靠性。

Scanner的使用

Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();

强制类型转换

当一个值为高取值范围,向低取值范围转换类型时,必须强制转换,因为其精度会丢失。

double a = 0.999;
int b = (int)a;
System.out.println("(int): " + b);

// 返回小于或等于参数的最大整数,即对浮点数向下取整。
int c = (int) Math.floor(a);
System.out.println("floor: " + c);

// 返回大于或等于参数的最小整数,即对浮点数向上取整。
int d = (int) Math.ceil(a);
System.out.println("ceil: " + d);

// 四舍五入
int e = (int) Math.round(a);
System.out.println("round: " + e);

自动类型转换

当一个值为低取值范围,向高取值范围转换类型时,会自动转换。

赋值运算符 =

算术运算符 + - * / % ++ -- += -= *= /= %=

关系运算符 == != > < >= <=

=:赋值运算符
==:等于运算符,判断是否相等

image

逻辑运算符 && || !

image

条件运算符(三目运算符)

image

运算符优先级

image

课后作业

使用变量完成以下操作:
银行存款1000元,一年的利息是5%,那么一年之后的钱总共是多少?

posted @ 2022-04-21 17:48  AtionLove  阅读(176)  评论(0)    收藏  举报