目录
1.进制
十进制(decimal):
数码:0 ~ 9
进位规则:满十进一
二进制(binary):
数码:0 ~ 1
进位规则:满二进一,以‘0b’或‘0B’开头
八进制(octal):
数码:0 ~ 7
进位规则:满八进一,以数字‘0’开头
十六进制:
数码:0 ~ 9,a ~ f
进位规则:满十六进一,以‘0x’或‘0X’开头,此处的a ~ f不区分大小写
进制转换:略
2.运算符
定义:运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
运算符的分类:
1.按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符
2.按照操作数个数分为:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)
2.1算术运算符:
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(取余) | 7%5 | 2 |
++ ++ | 自增(前):先运算后取值 自增(后):先取值后运算 | a=2;b=++a a=2;b=a++ | a=3;b=3 a=3;b=2 |
- - - - | 自减(前):先运算后取值 自减(后):先取值后运算 | a=2;b=--a a=2;b=a-- | a=1;b=1 a=1;b=2 |
+ | 字符串连接 | "He"+"llo" | "Hello" |
2.2赋值运算符:
符号:=
* 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
* 支持连续赋值。
扩展赋值运算符:+=、-=、*=、/=、%=
赋值运算符 | 符号解释 |
---|---|
+= | 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量 |
-= | 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量 |
*= | 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量 |
/= | 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量 |
%= | 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量 |
2.3比较(关系)运算符:
1. 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
2. >、<、>=、<=:只适用于基本数据类型(除boolean类型之外)。
3. 比较运算符“==”不能误写成“=”
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否类的对象 | "Hello" instanceof String | true |
2.4逻辑运算符:
1.& 和 &&:表示“且”关系,当符号左右两边布尔值都是true时,结果才能为true。否则,为false。
2.| 和 ||:表示“或”关系,当符号两边布尔值有一边为true时,结果为true。当两边都为false时,结果为false。
3.!:表示“非”关系,当变量布尔值为true时,结果为false。当变量布尔值为false时,结果为true。
4.^:表示“异或”关系,当符号左右两边布尔值不同时,结果为true。当两边布尔值相同时,结果为false。
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
* 区别“&”和“&&”:&如果符号左边是false,则继续执行符号右边的操作。&&如果符号左边是false,则不再继续执行符号右边操作。(“|”和“||”同理)
2.5位运算符:
1.位运算符的运算过程都是基于二进制的补码运算。
运算符 | 运算 | 范例 | 细节 |
---|---|---|---|
<< | 左移 | 3<<n→3乘2的n次方 | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 右移 | 3>>n→3除2的n次方 | 被移位的二进制最高位是0,右移后,空缺位补0;最高位为1,空缺位补1。 |
>>> | 无符号右移 | 3>>>n→3除2的n次方 | 被位移二进制最高位无论是0或者是1,空缺位都用0补 |
& | 与运算 | 6 & 3 = 2 | 二进制位进行与运算,只有1&1时结果是1,否则是0 |
| | 或运算 | 6 | 3 = 7 | 二进制位进行|运算,只有0|0时结果是0,否则是1 |
^ | 异或运算 | 6 ^ 2 = 5 | 相同二进制位进行^运算,结果是0:1^1=0,0^0=0 不相同二进制位^运算结果是1。1^0=1,0^1=1 |
~ | 取反运算 | ~6 = -7 | 正数取反,各二进制码按补码位取反 负数取反,各二进制码按补码位取反 |
2.6条件运算符:
格式:(条件表达式)? 表达式1 : 表达式2
说明:条件表达式是boolean类型的结果,根据boolean的值选择表达式1或表达式2
* 如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型
* 凡是可以使用条件运算符的地方,都可以改写为if-else结构。反之,不成立。开发中,如果既可以使用条件运算符,又可以使用if-else,推荐使用条件运算符。因为执行效率稍高
运算符优先级:
1.运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序。
优先级 | 运算符说明 | Java运算符 |
1 | 括号 | ()、[]、{} |
2 | 正负号 | +、- |
3 | 单元运算符 | ++、--、~、! |
4 | 乘法、除法、求余 | *、/、% |
5 | 加法、减法 | +、- |
6 | 移位运算符 | <<、>>、>>> |
7 | 关系运算符 | <、<=、>=、>、instanceof |
8 | 等价运算符 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 条件与 | && |
13 | 条件或 | || |
14 | 三元运算符 | ? : |
15 | 赋值运算符 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算符 | &=、|=、<<=、>>=、>>>= |
3.流程控制之分支语句
3.1 if-else 条件判断结构:
结构1:单分支条件判断:if
格式:
if(条件表达式){
语句块;
}
说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量。
执行流程:
结构2:双分支条件判断:if...else
格式:
if(条件表达式) {
语句块1;
}else {
语句块2;
}
执行流程:
结构3:多分支条件判断:if...else if...else
格式:
if (条件表达式1) {
语句块1;
} else if (条件表达式2) {
语句块2;
}
...
}else if (条件表达式n) {
语句块n;
} else {
语句块n+1;
}
执行流程:
* 语句块只有一条执行语句时,一对{}可以省略,但建议保留
if...else嵌套
在 if 的语句块中,或者是在else语句块中,又包含了另外一个条件判断(可以是单分支、双分支、多分支),就构成了嵌套结构。
3.2 switch-case选择结构:
格式:
switch(表达式){
case 常量值1:
语句块1;
//break;
case 常量值2:
语句块2;
//break;
// ...
[default:
语句块n+1;
break;
]
}
执行流程:
注意:
1.switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
2.case子句中的值必须是常量,不能是变量名或不确定的表达式值或范围;
3.同一个switch语句,所有case子句中的常量值互不相同;
4.break语句用来在执行完一个case分支后使程序跳出switch语句块;break,程序会顺序执行到switch结尾;
5.default子句是可选的。同时,位置也是灵活的。当没有匹配的case时,执行default语句。
利用case的穿透性:
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,执行终止。
3.3 if-else语句与switch-case语句比较
结论:凡是使用switch-case的结构都可以转换为if-else结构。反之,不成立。
建议:如果既可以使用switch-case,又可以使用if-else,建议使用switch-case。因为效率稍高。
if-else语句优势:
if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。
switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄。
switch语句优势:
当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为效率稍高。当条件是区间范围的判断时,只能使用if语句。
使用switch可以利用穿透性,同时执行多个分支,而if...else没有穿透性。
4.流程控制之循环语句
4.1 for循环
格式:
for (①初始化部分; ②循环条件部分; ④迭代部分){
③循环体部分;
}
执行流程:
说明:
1.for(;;)中的两个;不能多也不能少
2.初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
3.循环条件部分为boolean类型表达式,当值为false时,退出循环
4.可以有多个变量更新,用逗号分隔
4.2 while循环
格式:
①初始化部分
while(②循环条件部分){
③循环体部分;
④迭代部分;
}
执行流程:
说明:
1.while(循环条件)中循环条件必须是boolean类型。
2.注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
3.for循环和while循环可以相互转换。二者没有性能上的差别。实际开发中,根据具体结构的情况,选择哪个格式更合适、美观。
4.for循环与while循环的区别:初始化条件部分的作用域不同。
4.3 do-while循环
格式:
①初始化部分;
do{
③循环体部分
④迭代部分
}while(②循环条件部分);
执行流程:
说明:
1.结尾while(循环条件)中循环条件必须是boolean类型
2.do{}while();最后有一个分号
3.do-while结构的循环体语句是至少会执行一次,这个和for和while是不一样的
4.循环的三个结构for、while、do-while三者是可以相互转换的。
5.关键字break和continue
break:一旦执行,就结束(或跳出)当前循环结构。此关键字的后面,不能声明语句。
continue:一旦执行,就结束(或跳出)当次循环结构。此关键字的后面,不能声明语句
6.Scanner:键盘输入功能的实现
如何从键盘获取不同类型(基本数据类型、String类型)的变量:使用Scanner类。
键盘输入代码的四个步骤:
1.导包:import java.util.Scanner;
2.创建Scanner类型的对象:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量
4.释放资源:scan.close();
注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常 导致程序终止。