一.控制结构
顺序、分支(if else switch)、循环
二.细节
1.switch语句的一些小细节:
(1).switch语句是穿透的:
switch(表达式):
case 常量1:语句块1
case 常量2:语句块2
default:语句块3
当程序判断某个case的条件为真后,它将在执行该case所带的的语句块之后,不再对后面的case的条件进行判断而直接执行。若表达式返回常量1,则会执行语句块1、2、3。
若要让程序执行对应的语句块后退出,要加上break,有break跳出,没有break则会穿透
(2).表达式数据类型与常量的类型一致,或者是可以自动转换相互比较的类型
char c = 'b';
switch(c){
/*case "abc":
System.out.println("ok"); */ //String不能转换为char
case 'a':
System.out.println("ok1");
break;
case 98: // 98给char是没问题的
System.out.println("ok2");
break;
default:
System.out.println("ok3");
break;
int c = 50;
switch(c){
case 50.0:
System.out.println("ok1");
break;
case 98.0:
System.out.println("ok2");
break;
default:
System.out.println("ok3");
break;
//会出现错误 因为double->int会出现精度损失
(3).switch(表达式)表达式中返回值必须是byte、short、int、char、enum、String
(4).case中的值必须为常量
2.Switch与if的比较:
如果判断的具体数据不多,且符合byte、short、int、char、enum、String,建议用switch
对区间的判断或者对Boolean类型的判断,用if语句。
3.循环语句for的一些小细节:
循环变量初始化如果定义在for内,则该循环变量的作用域只在循环体内。
for(int i = 1; i <= 10 ; i++){
System.out.println("zhaojinhuai~");
}
System.out.println(i);
会报错:找不到符号i
4.while、do while、for比较
do while 先执行再判断
而while for 先判断后再执行
5. 跳转控制语句的细节
break主要出现在多层嵌套的语句块中,可以通过标签指定终止的是哪一层的语句块。
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);
}
}
输出:i = 0
i = 1
标签在实际开发中并不常用。
break后没加标签默认终止离break最近那一层循环体的语句块
continue指跳过当前循环语句块进入下一次循环。
return当使用在方法时表示跳出该方法,而使用在main中表示跳出程序。