文章目录
1. switch
1. 语法
switch(表达式) {
case 值1:
语句; //可选
break; //可选
case 值2:
语句; //可选
break; //可选
... ...
default:
语句; //可选
break; //可选
}
2. 执行流程
- 首先计算出表达式的值;
- 表达式值依次与case值比较,如果有对应的值,就执行相应的语句体,直到break结束;
- 如果所有的case值都与表达式值不匹配,就执行default语句体;
- switch语句结束。
3. 注意事项
- switch中参数的取值类型只能为byte、short、int、char、枚举(jdk1.5之后版本支持)、String(jdk1.7版本之后支持);
- case后的值只能是常量,不能是变量,且不能相同;
- 如果case语句部分没以break结束,就会出现case穿透1;
- default语句可以写在switch语句体中的任意位置,如果写在末尾,则可以省略break,如果不写在末尾,则default语句中必须有break,否则会出现case穿透。
测试代码如下:
int a = 2;
int b = 3;
/**
* a=2,switch中没有匹配值,执行default语句体
* 执行结束,b=4,break;
* switch语句结束,最终b=4
*/
switch(a){
default:
b++;
break;
case 3:
b++;
case 4:
b++;
}
System.out.println("b=" + b); //b=4
/**
* 此时a=2,b=4
* a=2,switch中没有匹配值,执行default语句体
* 执行结束,b=5,没有break,case穿透,继续往下执行
* case 3执行结束,b=6,没有break,case穿透,继续往下执行
* case 4执行结束,b=7
* switch语句结束,最终b=7
*/
switch(a){
default:
b++;
case 3:
b++;
case 4:
b++;
}
System.out.println("b=" + b); //b=7
2. 循环语句
1. 语法
1.for循环
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
测试代码如下:
/**
* for循环求1-100间偶数和
*/
int sum = 0;
for (int i = 0; i < 100; i += 2) {
sum += i;
}
//1-100间偶数和为(for循环):2450
System.out.println("1-100间偶数和为(for循环):" + sum);
2. while循环
while(判断条件语句){
循环体语句;
控制条件语句;
}
测试代码如下:
/**
* while循环求1-100间偶数和
*/
int sum = 0;
int i = 0;
while (i < 100) {
sum += i;
i += 2;
}
//1-100间偶数和为(while循环):2450
System.out.println("1-100间偶数和为(while循环):" + sum);
3. do…while循环
do{
循环体语句;
控制条件语句;
}while(判断条件语句);
测试代码如下:
/**
* do...while循环求1-100间偶数和
*/
int sum = 0;
int i = 0;
do {
sum += i;
i += 2;
} while (i < 100);
//1-100间偶数和为(do...while循环):2450
System.out.println("1-100间偶数和为(do...while循环):" + sum);
4. 循环结束语句
1. continue
结束本次循环
测试代码如下:
/**
* 当i=3时,执行到continue,本次循环结束,不再执行下面的输出语句,直接进入下一次循环
* 输出:
* 0 1 2 4
*/
for (int i = 0; i < 5; i++) {
if (i == 3) {
continue;
}
System.out.print(i + " ");
}
2. break
结束本层循环
测试代码如下:
/**
* 当i=3时,执行到break,本层循环结束,不再执行下面的语句以及后续的循环,直接结束循环
* 输出:
* 0 1 2
*/
for (int i = 0; i < 5; i++) {
if (i == 3) {
break;
}
System.out.print(i + " ");
}
3. 带标签的结束语句
结束嵌套的多层循环(continue与break都适用)
测试代码如下:
/**
* 可通过给for循环加上标签直接结束嵌套的外层循环
* 输出:
* 0 1 2
* 0 1 2
* 0 1 2
*/
wc:for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (i == 3) {
break wc;
}
System.out.print(j + " ");
}
System.out.println();
}
switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果没有break语句,那么就会从表达式的值相匹配的case标签处开始执行,一直执行到switch语句的末尾,这种从其中的一个case处开始,忽略后面的值的匹配,直接运行case的内容的现象就是穿透的现象。 ↩︎