目录
国庆去看了升旗,结果在天安门广场熬一夜通宵,居然感冒发烧了,
这两天身体才逐渐恢复,也是打起精神来更新一篇博客
可能写着写着脑子就乱了,有点不知所云,希望各位朋友发现了能及时指正,谢谢
一.变量
1.为什么需要变量
如果将一个程序看做是一个世界或者一个社会。那变量就是世界里的万事万物。
编程的本质是对内存中的数据的访问和修改。程序所用的数据都会被保存到内存当中,程序员需要一种机制来访问或修改内存中的数据,这种机制就是变量。
每个变量都代表了某一块内存,并且变量需要有个名字。
形象的来理解:变量就好比是一个有标签的盒子,当我们给变量赋值时,就是往盒子里装东西,当我们要读取变量的值,就是从盒子中取出东西。
总结出来一句话:变量是程序中不可或缺的部分,是最基本的存储单元。
这是在某东界面的截图,像排名,价格,商品名这些,都可以用变量表示。而根据不同的需要,我们还可以将变量设置为不同的类型。
2.初见变量
Java语言是强类型语言,关于这个强类型有两个含义:
1.所有的变量必须先声明后使用
2.指定类型的变量只能接受和它类型匹配的值
- 变量的概念
①内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
②变量由三个要素构成:数据类型、变量名、值
③变量声明格式:数据类型 变量名 = 变量值(也可先声明变量名,在其他行再给变量赋值);
其中在这三个要素当中,变量的值是最为重要的。只有变量的值是有具体含义的,其他的什么数据类型,变量名只是对于该变量的一个描述。
就拿这个手机的例子而言,像手机的价格,内存,都是明确的变量的值,也是在销售中最重要的部分。如果没有了变量值,那我们就会变成“零元购”的世界了。
- 注意事项
- Java当中的每个变量必须先声明再使用。
- 变量有作用域,只有在其作用域内才有效,定义在所在的一对{}内,出了其对应的作用域不可再被调用。
- 在同一个作用域当中不能定义重名的变量。
3.变量的数据类型
在Java中数据类型可分为两大类:基本数据类型和引用数据类型。
基本数据类型包括byte,short,int ,long, float ,double ,long, boolean
引用类型包括类,接口和数组类型。
在本次的文章中我们主要围绕基本数据类型进行研究。
4.变量的使用
变量声明格式:数据类型 变量名 = 变量值
在Java中也可以分成两步来做,下面我们将分别介绍
4.1变量的声明
声明格式:
数据类型 变量名;
//存储整型
int a;
//存储小数类型
double man;
//存储字符型
char out;
//存储布尔类型
boolean plane;
//存储字符串类型
String basketball;
4.2变量的赋值
给变量赋值就好比我们给一个商品标价,在原理上来说就是把“值”存到该变量代表的内存空间中。
需要注意的是,给变量赋的值必须和变量声明的类型一致。
变量赋值的格式:
变量名 = 值;
//可以使用合适类型的常量值给已经声明的变量赋值
a = 24;
man=198.37;
out = '劳';
//还可以使用其他变量或表达式给变量赋值
int b = 3;
int c = b;
int d = 5;
int x = b + d;
变量还可以反复赋值:
5.标识符
在定义变量时必须为变量指定名称,这个名称就是标识符。
在Java中标识符还用作对象,类的名称,也提供了一些关键字,这里我们将对标识符做一个较为详细的讲解。
5.1分隔符
在Java中,有一些符号具有特殊的分隔作用,被统称为“分隔符”.
1.分号
在Java语言当中,每条语句结束都必须使用分号作为结尾。
Java程序支持一行中书写多条语句,只要在每条语句结尾加上分号就行。
int a = 10;int b = 20;String c = "嗨";
int s = 666;
double b = 250.52;
不过在同一行中书写多个语句是个不好的代码书写习惯,这边建议大家还是写完一条语句做换行。
同时,一个字符串,变量名不能跨多行,所以建议各位朋友们养成一行只写一条语句的习惯。
2.花括号
花括号的作用是定义一个代码块,一个代码块就是“{”和“}”所包含的一段代码。花括号是成对出现的,有一个“{”,就必须有一个“}”。
3.方括号
方括号的作用是用于访问数组元素,方括号通常紧跟数组名。
4.圆括号
在定义方法时必须使用圆括号来包含所有的形参声明,在调用方法时也必须使用圆括号来传入实参值。
5.空格
空格在Java中可以出现在任何地方只要注意不要用空格把一个变量名隔开成两个。
6.圆点
圆点通常用作类和其成员之间的分隔符,表面调用某个类或者某个实例的指定成员。
5.2标识符规则
标识符就是用于给程序中变量,类,方法,命名的符号。
在Java当中标识符必须以字母,下划线,美元符号开头,后面跟任意数目的字母,数字,下划线和美元符号。
注意:
- 标识符可以有字母,数字,下划线,美元符号组成,但是数字不能作为开头
- 标识符不能是Java的关键字或保留字,但可以包含它们
- 标识符中不能有空格
- 标识符的特殊符号只有美元符号
二.基本数据类型
前面我们提过,Java是一种强类型语言,每一个变量都要声明一种类型。现在我们就来介绍定义变量要用的数据类型。
1.整数类型:byte,short,int,long
byte:一个byte类型的整数在内存中占8位,表数范围是-128~127
short:一个short类型的整数在内存中占16位,表数范围是-2^15~2^15-1
int:一个int类型的整数在内存中占32位,表数范围是-2^31~2^31-1
long:一个long类型的整数在内存中占64位,表数范围是-2^63~2^63-1
注意:
这里的位表示的是bit,是数据存储的最小单位。在二进制数系统中,每个0或1就是一个位,叫做bit,8bit就称为一个字节。
在通常情况下,程序中变量通常声明为int型。
既然说了是通常情况,那么接下来要说说特殊情况了。
如果直接将一个较小的整数值赋值给一个byte或short类型的变量,那么系统会自动把这个整数值当成byte类型或者short类型来处理。
如果使用一个巨大的整数值,Java不会讲其看作一个long类型。如果想要把一个整数值当初long类型来处理,需要在整数的值后面加上L(大小写均可),不过为了避免与数字1混淆,一般建议用L。
2.浮点类型:float,double
与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。
Java的浮点型有两种:float和double
在Java当中采用二进制数据的科学计数法表示浮点数。
float类型代表单精度浮点数,占4个字节
double类型代表双精度浮点数,占8个字节
Java的浮点数值默认是double类型,如果希望Java把一个浮点数值当作float,需要在其后面加上F(大小写均可)
public class Test {
public static void main(String[] args){
double a = 13.14;
float b = 5.20f;
System.out.println(a);
System.out.println(b);
}
}
关于浮点精度的说明
并不是所有的小数都能可以精确的用二进制浮点数表示。
浮点类型float、double的数据不适合在
不容许舍入误差
的金融计算领域。如果需要精确
数字计算或保留指定位数的精度,需要使用BigDecimal类
。
大家可以看一下这行代码:
System.out.println(0.1 + 0.2);
按照惯性思维,你会决定结果是0.3,但事实却不是如此。
在Java中,像0.1
和0.2
这样的浮点数使用二进制浮点数表示法来存储,这种表示法并不能精确地表示所有十进制小数。当进行浮点数运算时,这些小数可能会出现舍入误差。
关于这点,后续我会关于二进制再做一个详细的讲解。
3.字符类:char
字符型通常用于表示单个字符,字符型的值必须用单引号括起来。
字符型有三种表示形式:
- 直接通过单个字符来指定字符型值
- 直接通过转义字符来表示特殊字符值
- 直接使用Unicode值表示字符值
Java没有提供字符串·的·基本数据类型,而是通过String来表示字符串。
字符串是由多个字符组成的,因此需要用双引号讲字符串括起来。
String man = "什么罐头我说";
4.布尔类型:boolean
布尔型只有一个boolean类型,用于表示逻辑上的“真“或”假“。
boolean类型的数值只能是true或者false。
boolean b1 = true;
boolean b2 = false;
三.基本类型的类型转换
在Java程序中,不同的基本数据类型(只有7种,不包含boolean类型)变量的值经常需要进行相互转换。
转换的方式有两种:自动类型转换
和强制类型转换
。
需要注意的是:
当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统可以做自动类型转换。
当把一个表数范围大的数值或变量直接赋给另一个表数范围小的变量时,这时就需要做强制类型转换。
随着科技的不断发展 ,曾经风靡一时的win7系统,现在也慢慢升级到win10,win11了。你也会发现功能越来越好用,操作也更加便捷,这就类似于自动类型提升。
但如果让现在一位习惯win11系统的程序员再去用win7,那估计要花上挺大功夫适应,这个适应过程就类似于强制类型转化
1.自动类型转换
java的所有数值类型的变量可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,这种方式就叫做自动类型转换。
int a = 6;
float b = a;
System.out.println(b);//int类型可以自动类型转化为float类型
最后的输出结果是6.0
不仅如此,自动类型转化还可以做一件有意思的事。
如果我们想要讲几个基本类型的值和字符串做连接运算(类似于微信群内的名字:学号+姓名),这时基本类型的值讲自动转换为字符串类型,这样就可以和另一个字符串进行连接。
像这样直接赋值就是错的,因为5是整数,不能被直接赋值给一个字符串
当一个基本类型的值和字符串进行连接运算时,基本类型的值将自动转化为字符串。
上面一行代码,会先计算2 + 4,得到6,再把6当作字符串和后面的字符串连接,所以结果是6out
下面这行代码会先将out后面的3和5都当做字符串,做依次的连接运算,所有结果是24out35.
2.强制类型转化
前面我们拿Windows系统做了例子,如果要从“新系统”转回“老系统”,就必须要用强制类型转化。
规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小)的类型。
强制转化类型的格式:
数据类型1 变量名 = (数据类型1)被强转数据值; //()中的数据类型必须<=变量值的数据类型
当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转换为存储范围小的变量时,可能会损失精度
或溢出
int i = (int)3.14;//损失精度
double d = 1.2;
int num = (int)d;//损失精度
int i = 200;
byte b = (byte)i;//溢出
在上面的例子中,将一个浮点型强制转化为整数时,Java会切去后面的小数部分。
将233强制转化为byte类型的整数时,变成了-23,这就是数据溢出
(后续我将专门有一篇博客从计算机底层数据存储和进制转化进行详细讲解)
--------------------------------------------------------------------------------------------------------------------------
如果你看到这里,我对你说一声谢谢。
我并不是专业的计算机讲师,也只是编程道路上的一位学者
我也希望能用自己的一点努力帮助大家更好的学习知识。