流程控制
两种基本的流程控制结构:分支结构和循环结构。其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码。
这里是我的个人博客
分支结构
if语句第一种格式:
if(关系表达式) {
//语句体
}
执行流程
1.首先判断关系表达式看其结果是true还是false
2.如果是true就执行语句体
3.如果是false就不执行语句体
代码举例
public static void main(String[] args) {
int a = 3;
int b = 4;
if(a == b) {
System.out.println("a == b");
}
}
if语句第二种格式
if(关系表达式) {
//语句体1
} else {
//语句体2
}
执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
代码举例
public static void main(String[] args) {
int a = 3;
int b = 4;
if(a == b) {
System.out.println("a == b");
} else {
System.out.println("a != b");
}
}
if语句第三种格式
if(关系表达式) {
//语句体1
} else if(关系表达式2) {
//语句体2
}
...
} else if(关系表达式n) {
//语句体n
}else {
//语句体n + 1
}
执行流程
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
代码举例
public static void main(String[] args) {
int a = 3;
int b = 4;
if(a > b) {
System.out.println("a > b");
} else if(a < b){
System.out.println("a > b");
} else {
System.out.println("a = b");
}
}
if语句和三元运算符的互换
public static void main(String[] args) {
//两个数的最大值
int a = 3;
int b = 4;
int max;
if(a > b) {
max = a;
} else {
max = b;
}
int max1 = (a > b) ? a : b;
}
分支结构:switch
switch(表达式) {
case 数值1:
//语句体1
break;
case 数值2:
//语句体2
break;
case 数值3:
//语句体3
break;
...
default :
//语句体;
break;
}
//break:表示中断,结束的意思。
//default:表示所有的情况都不匹配的时候,就执行语句体n+1。和if语句的else相似。
执行流程:
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就 会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
注意事项:
switch(表达式)的数值类型是有限的,只能是四种基本数据类型和两种引用数据类型。
四种基本数据类型:byte,short, int, char。
两种引用数据类型:jdk5.0后支持枚举,jdk7.0后支持字符串String。
default的位置和case的位置可以互换,不影响。
代码举例
public static void main(String[] args) {
int a = 3;
switch(a) {
case 1:
System.out.println("a = 1");
break;
case 2:
System.out.println("a = 2");
break;
case 3:
System.out.println("a = 3");
break;
default :
System.out.println("a 不等于 1,2,3");
break;
}
}
//输出 a = 3
case穿透性
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,switch语句执行终止。
public static void main(String[] args) {
int a = 3;
switch(a) {
case 1:
System.out.println("a = 1");
break;
case 2:
System.out.println("a = 2");
break;
case 3:
System.out.println("a = 3");
case 4:
System.out.println("a = 4");
default :
System.out.println("a 不等于 1,2,3,4");
break;
}
}
//此时会输入
//a = 3
//a = 4
//a 不等于 1,2,3,4
循环结构
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循 环将一直执行下去,形成死循环。
for循环:
格式:
for(初始化语句①; 循环条件语句②; 迭代语句③) {
//循环体
}
执行流程:
第一步:执行初始化语句①,完成循环变量的初始化;
第二步:执行循环条件语句②,看循环条件语句的值是true,还是false;
如果是true,执行第三步;
如果是false,循环语句中止,循环不再执行。
第三步:执行循环体语句③
第四步:执行迭代语句④,针对循环变量重新赋值
第五步:根据循环变量的新值,重新从第二步开始再执行一遍
代码举例:
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("1");
}
}
while循环:
while语句标准格式:
while(条件语句①) {
//循环语句体②
}
执行流程:
第一步:执行循环条件语句①,看循环条件语句的值是true,还是false;
如果是true,执行第二步;
如果是false,循环语句中止,循环不再执行。
第二步:执行循环体语句②;
第三步:循环体语句执行完后,重新从第一步开始再执行一遍
while扩展格式:
初始化语句①;
while(条件语句②) {
循环语句体
迭代语句③
}
do... while()
do...while()语句标准格式
do {
循环体语句①;
} while (循环条件语句②);
执行流程:
第一步:执行循环体语句①;
第二步:执行循环条件语句②,看循环条件语句的值是true,还是false;
如果是true,执行第三步;
如果是false,循环语句终止,循环不再执行。
第三步:循环条件语句执行完后,重新从第一步开始再执行一遍
do...while()语句扩展格式
初始化语句①
do {
循环体语句②;
迭代语句③;
} while (循环条件语句④);
循环语句的区别
扩展格式的区别(了解)
从循环次数角度分析
do...while循环至少执行一次循环体语句
for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体
语句
从循环变量的生命周期角度分析
for循环的循环变量,在循环语句结束后,不可以被访问;
while和do...while循环的循环变量,是可以被继续使用的;
标准格式的区别(理解):
遍历有明显的循环次数(范围)的需求,选择for循环
遍历没有明显的循环次数(范围)的需求,循环while循环
控制语句
break
使用场景:终止switch或者循环
在选择结构switch语句中
在循环语句中
离开使用场景的存在是没有意义的
break后面不可以写任何语句。因为永远执行不到。
continue
使用场景:结束本次循环,继续下一次的循环
continue后面不可以写任何语句。因为永远执行不到
return
使用场景:应用在方法中,结束方法的
return后面不可以写任何语句。因为永远执行不到。