文章目录
变量和常量
字面量和常量
常量:程序中固定不变的值,比如:具体的整数值:1,2,3 小数常量:3.14 等
定义的final变量:也被称之为常量
变量
变量的定义:表示存储空间,可以用来存放某一类型的常量,没有固定的值,并可以重复使用,同时也可以用来存储某种类型的未知数据。
特点
- 占据内存中的某一块存储区域
- 该区域有自己的名字(变量名)和类型(数据类型)
- 可以被重复使用
- 该区域的数据可以在同一类型的范围内不断变化(变量被不断的重新赋值)
变量的定义
格式:数据类型名 变量名; 变量名 = 值;
直接赋值:数据类型 变量名 = 值;
变量的分类和作用域
- 成员变量:又称全局变量
- 局部变量:除了全局变量就都是局部变量,根据定义的形式的不同分为三种:方法形参,方法内变量,代码块变量
- 变量的作用域:指变量存在的范围,只有在这个范围内变量才有意义。当一个变量被定义时,作用域就被确定了。具体来说:范围在,定义开始到定义所在的花括号结束
变量使用规则
- 必须先声明,再初始化之后才能使用
- 声明时必须有数据类型
- 在相同的作用域中不能定义具有相同变量名的变量
数据类型
数据类型和分类
1.基本类型:
- 整数类型:byte,short,int,long
- 小数类型:float,double
- 字符型:char
- 布尔型:boolean
2.引用类型
- 类
- 接口
- 数组
数据类型
整数类型
byte,short,int,long类型
整数类型常量的四种表现形式
- 二进制表示:0B或0b开头(Java7新特性),如:int a = 0B110;
- 八进制整数:以0开头,int a = 012;
- 十进制整数:int a = 14;
- 十六进制整数:要求0x或者0X 开头,如:int a = ox12;
默认整数值的类型为int
小数类型
float,double类型
- float表示单精度类型
- double表示双精度类型
- 二者均不能表示精确的小数
默认的情况下一个浮点型的字面量默认是double类型的
注:BigDecimal可以表示精确的小数类型
字符类型
char类型:字符,字母,符号。表示16位的无符号整数或者Unicode字符,Java对字符采用Unicode编码,Java中的字符占据两个字节
最常用的引用类型String
除了八种基本数据类型,其他的都是引用类型,包括数组,类,接口,引用类型的默认值都是null
String表示一个类,表示字符串。可以使用“+”拼接字符串
数据过大和溢出
当要表示的数据超出数据类型的临界范围的时候,成为溢出。溢出情况发生时,程序并没有做数据范围检查处理,此时会出现数据紊乱情况。
int Max = 2147483647;
Max += 1;
System.out.println("Max = " + Max); //输出的结果为:--2147483648
同理使用最小的int值 - 1 依旧会发生如上紊乱。
其中数据紊乱的原因可以参考下图:
由上图可以看出,int类型的整个范围是一个闭环,在临界处进行运算会进行循环。
基本数据类型转换
类型转换的规则
上图表示了一般的类型转换的规则:可以从小到大,不能从大到小(大小标准:数据类型范围)
自动类型转换
又称“隐式类型转换”:小数据范围类型的数据转换为大数据范围类型的类型。
强制类型转换
当把大范围数据类型的数值或变量赋给另一个小范围类型变量时,此时系统不能自动完成转换,需要加上强制转换符,但时这样的操作极易造成数据精度的降低和溢出,所以需要谨慎使用。
byte a = (byte) 256;//需要使用强转符号 输出的值为:0
byte a = 125;//因为int值在byte的范围之内,此时底层给自动转了,所以不需要使用强转符号 输出:125
注意
- Boolean不属于数值类型,不参与转换
- 一般的byte,short,char不参与转换操作,我们直接把byte,short,char直接赋给int类型。
运算符
算术运算符
System.out.println("5878 / 1000 * 1000"); //输出结果为:5000
几个比较重要的知识点:
- 正无穷大:一个正浮点数/整数除以0.0得到正无穷大
- 负无穷大:一个负浮点数/整数除以0.0得到负无穷大
- 所有的正/负无穷大都相等 例如:1/0 = 2/0;(虽然运行报错)
- 0/0得到NaN 该值不与任何值相同,包括它自己
自增,自减
后置:先输出再运算
int a = 5;
System.out.println("a = "+a++); //输出结果:5
System.out.println("a = " + a); //输出结果:6
int c = a++; //此时a经过上面的运算已经变为了6
System.out.println("c = " + c); //输出结果:6
System.out.println("a = " + a); //输出结果:7
前置:先运算再输出
int b = 5;
System.out.println("b = " + ++b); //输出结果:6
System.out.println("b = " + b); //输出结果:6
赋值运算符
比较运算符
三元运算符
int num = 2;
num = num >= 2? 1 : 3;
System.out.println("num = " + num); //输出结果为1
使用三元运算符在有返回值的方法中,可以对代码进行简化
逻辑运算符
&:表示并且,当操作数都为true时,结果为true否则结果为false
&&:表示并且,具有短路效果,当左边的数值为false时,不执行右边的值
|:表示或者,只要有一边为true即为true
||:表示或者具有短路效果,只要左边的为true,就不执行右边的操作数
^:异或 判断A和B是否相同,相同为false,不同为true
!: 取反,true的值为false,false值为true
位运算符
遵循规则:
- & 参与运算的两个数,若对应位数的值都为1,则该位结果值为1,否则为0
- | 参与运算的两个数,只要有一个值为1,就为1
- ^ 参与运算的两个数相应位相同的结果为0,否则为1
- ~ 表示把每个二进制的"1"换成"0",把"1"换成"0"
- <<:将操作数的二进制码整体左移指定的位数,左移之后的空位使用”0“来填充;例如:1<<3 = 8 相当于122*2
- ”>>“将操作数的二进制码整体左移指定的位数,移后的空位使用符号位来填充
System.out.println(-100>>2); //输出结果为:-25
System.out.println(100>>2); //输出结果为:25
- ”>>>“无符号移位,将操作的二进制数码,整体右移指定位数,右移之后的空位使用”0“来补充。
运算符的操作优先级
总结
重要的知识点
- Java的数据类型
- 类型的转换(隐式,显式)
- 运算符的优先级