目录
1.自动类型转换
类型范围小的变量 , 可以直接赋值给类型范围大的变量 .
例 : byte a = 20; int b = a;
a的数值范围比b的小 , 当把 a 赋给 b 时会进行自动类型转换.
例1 : byte a = 10 ; int b = 20 ; double c = 1.0 ; double d = a + b + c ; //31.0
byte -> int -> double 接收数据时如果不使用double会产生异常.
例2 : byte a = 10; byte b = 20; byte c = a+b ;(报异常,可以把byte 改为 int 类型)
修改后 : byte a = 10; byte b = 20; int c = a+b ;
a+b 的数据无法使用byte来接收 .因为a 和 b 在运行的过程中自动转换成了 int 类型 .
注意 :
- 表达式的最终结果类型由表达式中的最高类型决定.
- 在表达式中 , byte , short , char 是直接转换成 int 类型参与运算的.
2.强制类型转换
可以强行将类型范围大的变量 , 数据赋值给类型小范围小的变量 .
注意 :
- 强制类型转换可能造成数据(丢失).
- 浮点型强制转成整型 , 直接丢失小数部分 , 保留整数部分返回 .
3.运算符
运算符 : 对字面量或者变量进行操作的符号.
一 . + 号的使用
(1) + 号可作为连接符使用 .
例 : int a = 10 ; string b = "abc"; System.out.printn(a+b);//10abc
注意 : + 在作为连接符时当字符串与数值相加时返回的是一个字符串 , + 也可作为运算符 ,
(2) 自增自减运算符
注意 :
- ++ 和 -- 既可以放在变量的后面 , 也可以放在变量的前面 .
- ++ , -- 只能操作变量 , 不能操作字面量的 .
二 . = (赋值运算符)
三 . 关系运算符
四 . 逻辑运算符
五 . 三元运算符
六 . 运算符优先级
4.流程控制语句
一 . If 分支
(1) if的作用
根据判定的结果( 真或假 )决定执行某个分支的代码.
(2) if分支的三种格式
二 . Switch 分支
(1) whitch 的作用
根据匹配条件去执行分支 , 适合做值匹配的分支选择 , 结构清晰 , 格式良好 .
(2) whitch 执行流程
- 先执行表达式的值 , 拿着这个值去与case 后的值进行匹配 .
- 匹配哪个 case 的值为 true 就执行哪个 case , 遇到break 就跳出switch 分支 .
- 如果 case 后的值不匹配则执行default 代码 .
例 :
Break : 跳出并结束当前所在循环的执行.
Countinue : 用于跳出当前循环的当次执行 , 进入下一次循环 .
注意事项 :
- 表达式类型只能是 byte , short , int , char , JDK5 开始支持枚举 , JDK7 开始支持String , 不支持 double , float , long .
- case 给出的值不予许重复 , 且只能是字面量 , 不能是变量 .
- 不能忘记写break , 否则穿透现象.
- Break : 只能用于结束所在循环 , 或者结束所在switch分支的执行 .
- Continye : 只能在循环中进行使用 .
Switch 的穿透性
- 如果代码执行行到没有写break的case块 , 执行完后将直接进入下一个case块执行代码 (而且不会进行任何匹配) , 直到遇到break才跳出分支,这就是switch 的穿透性.
例
三 . For 循环
for循环可以控制一段代码反复执行多次.
语法 : for( 初始化语句 ; 循环条件 ; 迭代语句 ) {
循环体语句(重复执行的代码);
}
例 :
For (int I = 0 ; I < 3 ; i++){
System.out.println("Hello World");
}
结果返回 三行 Hello World , 当执行到第四条数据时 I 大于 3 了,返回 flser ,结束循环.
四 . While 循环
while循环可以控制一段代码反复执行多次.
语法 : while(循环条件){
循环体语句 ( 被重复执行的代码 );
迭代语句;
}
例 :
Int I = 0;
While( I < 3 ){
System.out.println( "Hello Word" );
i++;
}
结果返回 三行 Hello World , 当执行到第四条数据时 I 大于 3 了,返回 flser ,结束循环.
注 : for 和 whlie 的使用规范 : 知道循环几次 ,就使用 for ; 不知道循环多少次的建议使用 whlie.
五 . Do-While 循环
先执行再判断循环条件.
语法 :
初始化语句;
Do{
循环体语句;
迭代语句;
}while(循环条件);
例 :
Int I = 0 ;
Do{
System.out.println("Hello World!");
i++;
}while( I < 3 );
Do-while循环的特点 : 一定会先执行一次循环体.
5.数组
数组 : 存储一批同种类型数据的内存区域 .
(1)静态初始化数组
定义初始化数组的形式 : 数据类型 [ ] 数组名 = new 数据类型 [ ] {元素1 , 元素2 , 元素 3 ...};
简写 : 数据类型 [ ] 数组名 = { 元素1 , 元素2 , 元素3 , ... };
注意 : 数组变量名中存储的是数组在内存中的地址 , 数组是引用类型 .
Length : 数组的长度属性 .
注意 :
- 数据类型 [ ] 数组名 也可以写成 数据类型 数组名 [ ] ;
- 什么类型的数组存放什么类型的数据 , 否则报错 .
- 数组一旦定义出来 , 程序执行的过程中 , 长度 , 类型就固定 .
(2) 动态初始化数组
定义数组的时候只确定元素的类型和数组的长度 , 之后再存入具体数据 .
定义动态初始化数组的形式 : 数据类型 [ ] 数组名 = new 数据类型 [ 长度 ] ;
int [ ] arr = new int [ 3 ] ;
两种数组定义的特点与区别
- 当前已经知道存入的元素值 , 用静态初始化 .
- 当前还不清楚要存入那些数据 , 要动态初始化 .
(3) 数组遍历
遍历 : 数据一个一个的进行访问 .
例 :
Int [ ] arr = { 12 , 45 , 32 , 56 , 32 };
For ( int I = 0 ; I < arr.length ; i++){
System.out,println( arr [ i ] );
}
(4) 数组的内存分配机制
方法区 : 字节码文件加载时进入的内存 .
栈内存 : 方法运行时所进入的内存变量也是在这里 .
堆内存 : new 出来的对象会在这块内存中开辟空间并产生地址 .