一、运算符

A,算术运算符(+ - * / % ++ --)

注:+号:可以作为连接符号,当左右两边有一个操作数是String字符串类型的时候,此时+是连接符号,将左右两边的操作数连接成一个新的字符串。

%:eg:10%3=10除以3取余数

++ --:如果是单独一条语句时,++和--在前后没有区别,都是自增1或者自减--,如果不是一条单独语句,++和--区分先后:前:先自增、自减,再运算;后:先运算,再自增、自减。

B、赋值运算符 (=)

int num=10;

C、扩展运算符(+= -= *= /=)

扩展运算符的优势:

  1. 提升了开发效率
  2. 提升了编译效率
  3. 可以自动强制类型转换

扩展运算符的劣势:

阅读体验差

D、关系运算符(> < >= <= != == instanceof)

注:

  1. 最后的结果是一个boolean值
  2. > < >= <=只能比较基本数据类型中除了boolean以外的类型
  3. == !=所有的类型都可以比较
  4. instanceof 只能比较某个变量是否从属于某个类型,只能比较引用类型。

E、逻辑运算符(& && | || ^ !)

注:

  1. 操作数都是boolean值
  2. 结果都是boolean值
  3. &和&& 如果有一个操作数是false,其结果就是false,&&第一个操作数如果是false,则第二个操作数不参与运算,直接得到结果false;
  4. |和|| 如果有一个操作数是true,其结果就是true,||第一个操作数如果是true,则第二个操作时不参与运算,直接得到结果true:
  5. !取反 ^相同为false,不同为true

F、条件运算符(三目运算符)

表达式1?表达式2:表达式3

注:

  1. 先计算表达式1的值,如果表达式1的值是true,则整个条件运算符的结果是表达式2的值,反之是表达式3的值;
  2. 一定要保证表达式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次,可以不需要重复编写。

  • 分支流程
  1. 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循环的循环变量是省内存的。