java学习笔记(五) - 控制结构

一、顺序控制

  • 程序从上到下逐行的执行,中间没有任何判断和跳转

1. 分支控制

  • 让程序有选择的执行

1.1 单分支

1
2
3
if(条件表达式){
//执行代码块
}
  • 当条件表达式为true,执行代码块中的内容,为false不执行
  • 当{}代码块中只有一条语句,{}可以省略

1.2 双分支

1.3 多分支

  • 可以没有else语句

1.4 嵌套分支

  • 一个分支中完整的嵌套了另外一个完整的分支结构,里面的为内层分支,外面的为外层分支
  • 嵌套分支最好不要超过3层
1
2
3
4
5
if(){
if(){
}else{
}
}

2. Switch

2.1 语法

1
2
3
4
5
6
7
8
9
10
11
12
switch(表达式){
case 常量1:
//语句块;
break;
case 常量2:
//语句块;
break;
....
default:
//语句块;
break;
}
  • switch关键字,表示switch分支
  • 表达式对应一个值
  • case常量1:当表达式的值等于常量1,就执行语句块1
  • break :表示退出switch语句
  • 如果和case常量1匹配,就执行语句块1,如果没有匹配,就继续匹配case常量2
  • 如果一个都没有匹配上,执行default

2.2 注意事项

  • 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型
  • switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum,String)
  • case子句中的值必须是常量,而不能是变量
  • default子句是可选的,当没有匹配的case时,执行default
  • break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写
    break,程序会顺序执行到switch结尾(即穿透现象)

2.3 switch和if的比较

  • 如果判断的具体数值不多,而且符合byte、 short、int、char、enum[枚举]、String这6种类型建议使用swtich语句
  • 其他情况:对区间判断,对结果为boolean类型判断,使用if,if作使用范围更广

二、循环控制

1. for循环

1.1 语法

1
2
3
4
5
6
7
8
for(循环变量初始化;循环条件;循环变量迭代){
//循环操作(语句);
}

//案例
for(int i = 0; i <= 9; i++){
System.out.println("i= " + i);
}

1.2 注意事项

  • 循环条件是返回一个布尔值的表达式
  • for(循环判断条件;)中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略
  • 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开

2. while循环

2.1 语法

1
2
3
4
5
6
7
8
9
10
11
12
循环变量初始化;
while(循环条件){
循环体(语句);
循环变量迭代;
}

//案例
int i = 10;
while(i >= 0){
System.out.println("i= " + i);
i--;
}

2.2 注意事项

  • 循环条件是返回一个布尔值的表达式
  • while循环是先判断再执行语句

3. do while循环

3.1 语法

1
2
3
4
5
6
7
8
9
10
11
12
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);

//案例
int i = 10;
do{
System.out.println("i= " + i);
i--;
}while(i >= 0);

3.2 注意事项

  • 循环条件是返回一个布尔值的表达式
  • do..while循环是先执行,再判断,因此它至少执行一次

4. 多重循环控制

  • 将一个循环放在另一个循环体内,就形成了嵌套循环
  • 实质上,嵌套循环就是把内层循环当成外层循环的循环体,当只有内层循环的循环条件为
    false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环
  • 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m**n次
1
2
3
4
5
for(int i = 0;i <= 9; i++){
for(int j = 0;j <= 2; j++){
System.out.println("i= " + i + "j= " + j);
}
}

三、跳转控制语句

1. break

  • break语句出现在多重嵌套语句块中,可通过标签指明要终止的是那一层语句块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lable1:{
lable2:{
lable3:{
break lable2;
}
}
}

//案例
lable1:
for(int j = 0; j<4; j++){
lable2:
for(int i = 0;i< 10; i++){
if(i == 2){
break lable1;
}
System.out.println("i= " +i);
}
}
  • break语句可以指定退出哪层
  • label1是标签,由程序员指定
  • break后指定到哪个label就退出到哪里
  • 在实际的开发中,尽量不要使用标签
  • 如果没有指定break,默认退出最近的循环体

2. continue

  • continue语句用于结束本次循环,继续执行下一次循环
  • continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
continue;
}

//案例
lable1:
for(int j = 0; j<4; j++){
lable2:
for(int i = 0;i< 10; i++){
if(i == 2){
continue lable1;
}
System.out.println("i= " +i);
}
}

3. return

  • 用在方法,表示退出方法
  • 如果用在main方法,表示退出程序
1
2
3
public String test(){
return "hello";
}