一、 基本数据类型
1.1 整型
byte a=127;
//b=128; 报错,128超过byte所能存储的最大值
byte b= 128;
short c=32767;
//d=32768; 报错,32768超过short所能存储的最大值
short d=32768;
int e=2147483647;
//f=2147483648; 报错,2147483648超过int所能存储的最大值
int f=2147483648;
//g=2147483648; 报错,java默认整数直接量是int类型,超过int类型必须加l/L
long g=2147483648;
long h=2147483648L;
1.2 浮点型
double a=5.54;
// b=5.5; 报错,java默认浮点型直接量是double类型,不是double类型必须加f/F
float b=5.5;
float c=5.5F;
1.3 字符型
定义时可以使用数字(Unicode)码,或者使用’单引号’来标记
char a=97;
char b='a';
System.out.println(a==b);// true 这是因为字符a的Unicode码就是97
1.4 布尔型
boolean a=true;
boolean b=false;
二、变量与常量
2.1 变量
在java中,每个变量都有一个类型,在声明变量时,必须先指定变量的类型,然后才是变量名,但是变量名需要遵循一下规则:
- 必须以字母开头并只包含字母或数字
- 不能使用java的保留字作为变量名
int student;
double salary;
在声明一个变量名后,必须使用赋值语句对变量进行显示的初始化,未进行初始化的变量是不能使用的。
int student;
System.out.println(student);// 报错,使用了未初始化的变量
2.2 常量
在java中使用final来指定常量
final int PI =3 ;
PI=4;// 报错 不能为常量重新赋值
final定义的常量表示这个常量只能被赋值一次,一旦赋值了就不能修改
2.3 枚举类型
场景:当变量的取值在一个有限的集合内,比如衣服的尺码:小、中、大、超大,在定义这种的时候,可以使用枚举
enum Size{
SMALL,MEDIUM,LARGE,EXTRA_LARGE
}
三、数据类型转换
3.1 类型转换
3.1.1 自动类型转换
① 不需要我们自己操作,由jvm自动完成的转换
② 当我们把小的类型变量(数据)赋值给较大的变量时,会自动进行数据转换
3.1.2 强制类型转换
① 当我们把大的类型变量(数据)赋值给较小的变量时,需要进行强制类型转换,需要注意的是,强制类型转换可能会造成精度缺失和溢出。
② 语法:变量类型A 变量a = (A)变量b
3.1.3 数据类型之间合法的转换
基本数据类型转换,其中实线部分表示无信息丢失的转换,而虚线表示可能存在精度损失的转换
3.2 运算中的类型转换
- byte、short、char和int在进行算术运算时的结果都是int型
- 除了上述的,在算术运算中的结果类型都是按照其中最大的类型定的
byte b1=1;
byte b2=2;
byte b3=(byte) (b1+b2);
long l=123L;
//int n=l+123; 结果是long型
long n=l+123;
四、运算符
4.1 算术运算符
加(+)、减(-)、乘(*)、除(/),取余(%),自增(++)、自减(–)
注意:
- 除(/):整数的除法运算结果一定是整数
- 取余(%):常用在整数上
- 自增(++)、自减(–)在位置上的区别:
①:符号在前:先进行自增(自减)运算,然后在进行其他运算
②:符号在后:先进行其他运算,然后在进行自增(自减)运算
4.2 关系与逻辑运算
关系运算符:>、<、>=、<=、==(是否相等)、!=(不等于)
关系运算符的结果是boolean值,常用做条件表达式中
逻辑运算符:&&/&(与)、||/|(或)、!(非)
参与逻辑运算的都是boolean值,而且运算结果也是boolean
4.3 字符串连接符
连接符:+
当参与运算的元素中一方是字符串时,则是连接符
4.4 条件(三目)运算符
语法:(条件表达式)?(表达式1):(表达式2)
运算逻辑:先判断条件,如果为true,则选择表达式1;如果为false,则选择表达式2
五、控制流程
5.1 分支结构
5.1.1 if结构
5.1.1.1 if语句
- 语法
if(条件){
code;
}
当条件成立时,执行code,条件不成立,则跳过
5.1.1.2 if…else语句
- 语法
if(条件){
code1;
}else{
code2;
}
当条件成立时,执行code1,条件不成立时执行code2
5.1.1.3 if…else if …else语句
- 语法
if(条件1){
code1
} else if(条件2){
code2;
}
...
else{
code3;
}
当条件1成立时,执行code1,若条件1不成立但是条件2成立时则执行code2,如果等等条件都不成立,则执行code3
5.1.2 switch结构
- 语法
switch(表达式){
case v1:
code1;
break;
case v2:
code2;
break;
...
default:
code3;
break;
}
先计算表达式的值,和case中的值进行比对,找到对应的code,需要注意的是,在执行对应的code时,会依次向下继续执行其他的code,直到碰到break为止
5.2 循环结构
5.2.1 while语句
- 语法
while(条件){
code;
}
先判断条件,如果成立,则执行code,执行完毕后在判断条件是否成立,如果成立,继续执行code,直到条件判断不成立为止
5.2.2 do…while语句
- 语法
do{
code;
}while(条件);
先执行code,执行完毕后在判断条件是否成立,如果成立,继续执行code,直到条件判断不成立为止
5.2.3 for语句
- 语法
for(表达式1;条件;表达式2){
code;
}
先执行表达式1,在执行判断条件,如果成立则执行code,执行完毕后执行表达式2,再判断条件是否成立,如果成立,则执行code,执行完毕后执行表达式2,直到条件不成立为止
5.3 跳出语句
5.3.1 continue语句
- 跳出本次循环,直接进行下一次循环(这个循环本身并没有被终止)
int j = 0;
while (j < 10) {
j++;
// 当j的值为3的倍数时,则跳过本轮操作
if (j % 3 == 0) {
continue;
}
System.out.println(j);//1 2 4 5 7 8 10
}
5.3.2 break语句
- 结束当前循环
int i = 1;
while (i < 10) {
// 当i为5时,终止循环
if (i == 5) {
break;
}
System.out.println(i);// 1 2 3 4
i++;
}
5.3.3 带标签的break
- 常用于跳出多重嵌套的循环语句
read_data:
for(int i =1;i<5;i++){
for (int j = 1; j < 3; j++) {
if(i==2 && j==1){
break read_data;
}
System.out.println(i*j); // 1 2
}
}
这里的read_data是个标签,标签必须放在希望跳出的最外层循环之前,后面必须紧跟一个冒号
六、数组
数组是最简单的一种数据结构,是用来存储相同类型值的序列
6.1 数组的声明
int [] arr;
6.2 数组的初始化
①:在声明的同时指定数组的内容:变量类型[]a={元素};
int [] arr={1,2,3}
②:指定数组的长度,元素为该数组类型的默认值:变量类型[] 数组=new 变量类型[length]
int [] arr=new int[100]
③:给数组添加元素,元素的个数就是数组的长度:变量类型[] 数组 = new 变量类型[]{元素}
int [] arr = new int[]{1,2,3}
6.3 数组的访问
- 通过length属性来访问数组的长度:arr.length
System.out.println(arr.length);
- 通过数组的下标访问数组的元素(数组的下标从0开始,最大值为数组的length-1)
System.out.println("数组c的第一个元素是:" + arr[0]);
//把数组的第二个元素赋值为5
arr[1] = 5;
System.out.println("数组c的第二个元素是:" + arr[1]);
6.4 数组的遍历
- 使用Arrays.toString(arr)来遍历数组
System.out.println(Arrays.toString(arr));
- 使用循环来遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}