一、运算符
A,算术运算符(+ - * / % ++ --)
注:+号:可以作为连接符号,当左右两边有一个操作数是String字符串类型的时候,此时+是连接符号,将左右两边的操作数连接成一个新的字符串。
%:eg:10%3=10除以3取余数
++ --:如果是单独一条语句时,++和--在前后没有区别,都是自增1或者自减--,如果不是一条单独语句,++和--区分先后:前:先自增、自减,再运算;后:先运算,再自增、自减。
B、赋值运算符 (=)
int num=10;
C、扩展运算符(+= -= *= /=)
扩展运算符的优势:
- 提升了开发效率
- 提升了编译效率
- 可以自动强制类型转换
扩展运算符的劣势:
阅读体验差
D、关系运算符(> < >= <= != == instanceof)
注:
- 最后的结果是一个boolean值
- > < >= <=只能比较基本数据类型中除了boolean以外的类型
- == !=所有的类型都可以比较
- instanceof 只能比较某个变量是否从属于某个类型,只能比较引用类型。
E、逻辑运算符(& && | || ^ !)
注:
- 操作数都是boolean值
- 结果都是boolean值
- &和&& 如果有一个操作数是false,其结果就是false,&&第一个操作数如果是false,则第二个操作数不参与运算,直接得到结果false;
- |和|| 如果有一个操作数是true,其结果就是true,||第一个操作数如果是true,则第二个操作时不参与运算,直接得到结果true:
- !取反 ^相同为false,不同为true
F、条件运算符(三目运算符)
表达式1?表达式2:表达式3
注:
- 先计算表达式1的值,如果表达式1的值是true,则整个条件运算符的结果是表达式2的值,反之是表达式3的值;
- 一定要保证表达式2和表达式3的类型一致,因为如果不一致会触发类型转化。
G、位运算符(& | ^ ~ >> << >>>)
& 同1为1
| 有1为1
^ 相同0不同1
~ 所有位0变1,1变0
>> M>>N =M/2^N 右侧省略N位,通过符号位补充左侧
<< M<<N =M*2^N 左侧省略N位,通过0补充右侧
>>> 右侧省略N位,通过0补充左侧
二、流程控制
顺序流程:自上而下进行;
分支流程:在执行的过程中,遇到一些条件,导致程序开始按照不同的执行流程继续顺序执行。
循环流程:在执行的过程中,我们要求程序执行某些代码片段执行N次,可以不需要重复编写。
- 分支流程
- if分支
单分支结构
语法结构:if(expression){
statement1;
…………
statementN;}
执行顺序:1、判定表达式的结果
2、如果表达式是true,执行if对应的执行语句,执行结束之后,整个if执行完成,执行后续代码逻辑
3、如果表达式是false,则跳过整个if单分支结构,执行后续代码逻辑
双分支结构
语法结构:
if(expression){
statement1;
…………;
statementN;
}else{
statement1;
…………;
statementN;}
执行顺序:1、判定表达式的结果
2、如果表达式是true,执行if对应的执行语句,执行结束后,整个if-else执行完成,执行后续代码逻辑
3、如果表达式是false执行else对应的执行语句,执行结束之后,整个if-else执行完成,执行后续代码逻辑
多分支结构
语法结构:
if(expression){
statement1;
…………;
statementN;
}else if(expression){
statement1;
…………
statementN;
}else if(expression){
statement1;
…………
statementN;
}…………{
}else{
statement;
}
执行顺序:1、判定表达式1的结果,如果是true执行对应的执行语句,结束整个多分支,如果是false,判定表达式2
2、如果表达式2的结果为true,执行对应的执行语句,结束整个多分支,如果是false,判定表达式3
3、依次类推,如果所有的表达式都不满足,则执行else语句
2.switch分支
语法结构:
switch(expression){
case value1:
statement1;break;
case value2:
statement2;break;
…………
case valueN:
statementN;break;
default:
statement;
}
执行顺序:1、计算表达式的结果,依次匹配对应的case
2、如果匹配上了,则执行对应的执行语句,结束整个switch
3、如果所有的case都不匹配,则执行对应的default(存在)
注意事项:1、记得执行语句后面加break防止case穿透
2、利用case穿透少写代码
3、表达式的值一定是:byte、short、char、int中的一个,或者是Enum枚举,或者是String
4、switch一定程度上效率是高于if的,switch是等值判定,if是区间判定
- 循环流程
1、while循环
语法结构:
while(expression){
//loop-statement;
}
执行顺序:
1、判定表达式的值,如果是false,则跳过整个while循环
2、如果表达式的值是true,则执行循环体一次
3、再继续判定,直到条件不满足,结束整个while循环
注意事项:不知道循环执行多少次,但是知道什么时候停止。
2.do-while循环
语句结构
do{
// loop-statement;
}while(expression);
执行顺序:
1、先执行循环体一次
2、判定循环条件,如果是true继续执行循环体,直到条件不满足为止
3、如果条件是false,则结束整个do-while循环
注意事项:使用do-while的场景比较少,唯一的就是,需要通过循环体的计算来判定循环条件
3.for循环
语法结构
for( ; ; ){
statement;
}
或者是
for(int i=x;x<=m;i++){
statement;
}
执行顺序
1、声明循环变量
2、判定循环条件,如果是true执行循环体一次
3、如果是false跳过for循环
注意事项:for循环能够确定循环次数,for循环的循环变量是省内存的。