概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果 有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现 我们要完成的功能。
流程语句分类: 1、顺序语句 2、选择语句 3、判断语句 4、循环语句
1、顺序语句的概述
按照顺序,从上往下依次执行
例如:
public static void main(String[] args) {
//顺序执行,根据编写的顺序,从上到下运行
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
运行结果:
1
2
3
2、选择语句 switch
2.1 switch语句格式:
switch(表达式){ case 常量值1:
//语句体1;
break;
case 常量值2:
//语句体2;
break;
…
default:
//语句体n+1;
break; }
2.2 执行流程
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
代码实例:
int weekday = 6;
switch (weekday) {
case 1:
System.out.println("星期 1");
break;
case 2:
System.out.println("星期 2");
break;
case 3:
System.out.println("星期 3");
break;
case 4:
System.out.println("星期 4");
break;
case 5:
System.out.println("星期 5");
break;
case 6:
System.out.println("星期 6");
break;
case 7:
System.out.println("星期 7");
break;
default:
System.out.println("输入有误!");
break;
}
运行结果:
星期 6
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束。
重点(笔试常见)switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。
3、判断语句 if
3.1 if语句第一种格式:
if(关系表达式){
语句体;
}
3.1.1 执行循环体
首先判断关系表达式 ,看其结果是true还是false ,如果是true就执行语句体 ,如果是false就不执行语句体.
代码实例:
public static void main(String[] args) {
int a = 20;
int b = 10;
if (a == b) {
System.out.println("a == b");
}
if (a != b) {
System.out.println("a != b");
}
}
运行结果:
a != b
if语句第二种格式:if–else(重要)
3.2.1 if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
3.2.2 执行流程:
首先判断关系表达式 ,看其结果是true还是false , 如果是true就执行语句体1 ,如果是false就执行语句体2
代码实例:
public static void main(String[] args) {
int a = 20;
int b = 10;
if (a == b) {
System.out.println("a == b");
} else {
System.out.println("a != b");
}
}
if语句第二种格式:if–else(很重要)
1.3.1 if语句第三种格式:
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
… …
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
3.2.2 执行流程:
首先判断关系表达式1,看其结果是true还是false, 如果是true就执行语句体1,
如果是false就继续判断关系表达式2,看其结果是true还是false ,如果是true就执行语句体2,
如果是false就继续判断关系表达式…看其结果是true还是false … 如果没有任何关系表达式为true,就执行语句体n+1。
代码实例:
public static void main(String[] args) {
System.out.println("输入一个数:");
Scanner scanner = new Scanner(System.in);
int c = scanner.nextInt();
if (c > 0 && c < 20) {
int d = c++;
System.out.println("d的值是:" + d);
} else if (c < 0) {
int d = c--;
System.out.println("d的值是:" + d);
} else if (c > 20) {
int d = ++c;
System.out.println(c--);
}
}
运行结果:
输入一个数:
5
d的值是:5
3.3、if语句和三元运算符的互换
在某些简单的应用中,if语句是可以和三元运算符互换使用的。
public static void main(String[] args) {
int a = 10;
int b = 20;
//定义变量,保存a和b的较大值
int c;
if (a > b) {
c = a;
} else {
c = b;
}
//可以上述功能改写为三元运算符形式
c = a > b ? a : b;
}
4、循环语句
4.1、循环语句 for
格式:
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}
1.1 执行流程
执行顺序:①②③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化
②负责判断是否满足循环条件,不满足则跳出循环
③具体执行的语句
④循环后,循环条件所涉及变量的变化情况
代码实例:
使用循环,计算1-100之间的偶数和。
public static void main(String[] args) {
//1.定义一个初始化变量,记录累加求和,初始值为0
int sum = 0;
//2.利用for循环获取1‐100之间的数字
for (int i = 1; i <= 100; i++) {
//3.判断获取的数组是奇数还是偶数
if (i % 2 == 0) {
//4.如果是偶数就累加求和
sum += i;
}
}
//5.循环结束之后,打印累加结果
System.out.println("sum:" + sum);
}
sum:2550
4.2、循环语句2 while
4.2.1 格式:
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式④
}
4.2.2 执行流程
执行顺序:①②③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句。
④循环后,循环变量的变化情况。
代码实例:
while循环输出10次HelloWorld。
public static void main(String[] args) {
//while循环实现打印10次HelloWorld
//定义初始化变量
int i = 1;
//循环条件<=10
while (i <= 10) {
System.out.println("HelloWorld");
//步进
i++;
}
}
4.3、循环语句1 do…while
4.3.1格式:
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②);
4.3.2 执行流程
执行顺序:①③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句
④循环后,循环变量的变化情况
代码实例:
while循环输出10次HelloWorld。
public static void main(String[] args) {
int x = 1;
do {
System.out.println("HelloWorld");
x++;
} while (x <= 10);
}
4.4、do…while总结
do…while循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的
循环具有一定的风险性,因此初学者不建议使用do…while循环。
do…while和while的区别(主要就是while先判断后执行,do…while先执行后判断)。
4.5 for循环和while循环的区别(了解)
1、控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
2、在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。