1.1、控制语句的作用
控制语句的出现可以让我们的程序具有逻辑性/条理性,可以使用控制语句来实现一个“业务”了。
1.2、控制语句包括几类?
3类:
选择语句
循环语句
转向语句
1.3、选择语句(或者 分支语句、条件语句)
if语句
switch语句
1.4、循环语句:主要循环反复的去执行某段特定的代码块
for循环
while循环
do…while…循环
1.5、转向语句
break
continue
return(这个目前先不需要学习,后面讲方法的时候会使用。)
if语句的语法格式:
第一种写法:
int a = 100;
int b = 200;
if(布尔表达式){
java语句;
java语句;
}
这里的一个大括号{} 叫做一个分支。if 这个单词翻译为“如果”,所以又叫做条件语句。
【执行原理】:
如果布尔表达式的结果是true,则执行大括号中的程序,否则大括号中代码不执行。
第二种写法:
if(布尔表达式){ // 分支1
java语句;
}else{ // 分支2
java语句;
}
【执行原理】:如果布尔表达式的结果是true,则执行分支1,分支2不执行。
如果布尔表达式的结果是false,分支1不执行,执行分支2.
以上的这个语句可以保证一定会有一个分支执行。else表示其它。
第三种写法:
if(布尔表达式1){ // 分支1
java语句;
}else if(布尔表达式2){ // 分支2
java语句;
}else if(布尔表达式3){
java语句;
}else if(布尔表达式4){
java语句;
}....
【执行原理】:
先判断“布尔表达式1”,如果“布尔表达式1”为true,则执行分支1,然后if语句结束了。
当“布尔表达式1”结果是false,那么会继续判断布尔表达式2的结果,
如果布尔表达式2的结果是true,则执行分支2,然后整个if就结束了。
从上往下依次判断,主要看第一个true发生在哪个分支上。
第一个true对应的分支执行,只要一个分支执行,整个if结束。
第四种写法:
if(布尔表达式1){ // 分支1
java语句;
}else if(布尔表达式2){ // 分支2
java语句;
}else if(布尔表达式3){
java语句;
}else if(布尔表达式4){
java语句;
}else{
java语句; // 以上条件没有一个成立的。这个else就执行了。
}
注意:
1、对于if语句来说,在任何情况下只能有1个分支执行,不可能存在2个或者更多个分支执行。
if语句中只要有1个分支执行了,整个if语句就结束了。(对于1个完整的if语句来说的。)
2、以上4种语法机制中,凡是带有else分支的,一定可以保证会有一个分支执行。
以上4种当中,第一种和第三种没有else分支,这样的语句可能会导致最后一个分支都不执行。
第二种和第四种肯定会有1个分支执行。
3、当分支当中 “java语句;” 只有1条,那么大括号{}可以省略,但为了可读性,最好不要省略。
(有的程序员在编写代码的时候,可能会故意将大括号{}省略,你能看懂就行。)
4、控制语句和控制语句之间是可以嵌套的,但是嵌套的时候大家最好一个语句一个语句进行分析,
不要冗杂在一起分析。
if(true){
//窍门:分析外面if语句的时候,里面的这个if语句可以看做是普通的一堆java代码。
if(true){
if(false){
}else{
....最终走这里了。
}
}else{
}
}else{
}
【例】
int i = 100;
if(i == 100){
System.out.println("i是100");
}
3.1 switch语句的语法格式
switch(值){
case 值1:
java语句;
java语句;...
break;
case 值2:
java语句;
java语句;...
break;
case 值3:
java语句;
java语句;...
break;
default:
java语句;
}
以上是一个完整的switch语句:
其中:break;语句不是必须的。default分支也不是必须的。
switch语句支持的值有哪些?
支持int类型以及String类型。
但一定要注意JDK的版本,JDK8之前不支持String类型,只支持int。
在JDK8之后,switch语句开始支持字符串String类型。
switch语句本质上是只支持int和String,但是byte,short,char也可以
使用在switch语句当中,因为byte short char可以进行自动类型转换。
switch语句中“值”与“值1”、“值2”比较的时候会使用“==”进行比较。
3.2 switch语句的执行原理
拿“值”与“值1”进行比较,如果相同,则执行该分支中的java语句,
然后遇到"break;"语句,switch语句就结束了。
如果“值”与“值1”不相等,会继续拿“值”与“值2”进行比较,如果相同,则执行该分支中的java语句,
然后遇到break;语句,switch结束。
注意:如果分支执行了,但是分支最后没有“break;”,此时会发生case穿透现象。
【case穿透现象】—————————
case穿透和break有关,只有当遇到break时才会终止,如果一个case里面的代码最后面没有break,
那么程序会继续执行后面case中的代码块,而不对case上面的值进行匹配,直接执行case里面的代码块,
直到遇到break才会停止。
所有的case都没有匹配成功,那么最后default分支会执行。
3.3 【例】
switch(num){
case 1: case 2: case 3: // case合并
System.out.println("星期一");
break;
case 4:
System.out.println("星期二");
break;
case 5:
System.out.println("星期三");
break;
case 6:
System.out.println("星期四");
break;
case 7:
System.out.println("星期五");
break;
case 8:
System.out.println("星期六");
break;
default:
System.out.println("星期日");
}
4.0 什么是循环语句,为什么要使用这种语句?
因为在现实世界当中,有很多事情都是需要反复/重复的去做。
对应到程序当中,如果有一块代码需要重复执行,此时为了减少代码量,我们使用循环语句。
【语法机制】:
for(初始化表达式; 条件表达式; 更新表达式){
循环体; // 循环体由java语句构成
java语句;
java语句;
java语句;
java语句;
....
}
注意:
第一:初始化表达式最先执行,并且在整个循环中只执行一次。
第二:条件表达式结果必须是一个布尔类型,也就是:true或false
【执行原理】:
先执行初始化表达式,并且初始化表达式只执行1次。
然后判断条件表达式的结果,如果条件表达式结果为true,则执行循环体。
循环体结束之后,执行更新表达式。
更新完之后,再判断条件表达式的结果,
如果还是true,继续执行循环体。
直到更新表达式执行结束之后,再次判断条件时,条件为false,
for循环终止。
更新表达式的作用:控制循环的次数,换句话说,更新表达式会更新某个变量的值,
这样条件表达式的结果才有可能从true变成false,从而终止for循环的执行,
如果缺失更新表达式,很有可能会导致死循环。
【例1】for(int i = 0; i < 100; i++){
System.out.println(100);
}
【例2】 最简练的for循环怎么写?
【注意】初始化表达式、条件表达式、更新表达式 其实都不是必须的!!!
for(;;){
System.out.println("死循环"); //一直输出“死循环”、“死循环”、“死循环”。。。。
}
【例3】 for(int k = 0; k < 2; k++){ // 循环2次,k=0一次,k=1再来一次
for(int i = 0; i < 10; i++){
System.out.println("i ---> " + i); // i ---> 0 i ---> 1 i ---> 2 ... i ---> 8 i ---> 9
} // (第二次)i ---> 0 i ---> 1 i ---> 2 ... i ---> 8 i ---> 9
}
【注意:for循环嵌套————在分析外层for循环的时候,把里面的for就当做一段普通的java语句/代码】
【例4:九九乘法表】
/*
九九乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
....
......
1*9=9 2*9=18.............................9*9=81
各位,请找一下以上九九乘法表的特点?????
第一个特点:共9行。
第二个特点:第1行1个。第2行2个。第n行n个。
最重要的是:不要慌,慢慢的把思路捋出来,再写代码。
*/
public class ForTest06{
public static void main(String[] args){
// 9行,循环9次。
for(int i = 1; i <= 9; i++){ // 纵向循环
//System.out.println(i); // i是行号(1~9)
// 负责输出一行的。(内部for循环负责将一行上的全部输出。)
for(int j = 1; j <= i; j++){ // i是行号
System.out.print(j + "*" + i + "=" + i * j + " ");
}
// 换行
System.out.println();
}
}
}
1、while循环的语法机制以及执行原理
【语法机制】:
while(布尔表达式){
循环体;
}
【执行原理】:
判断布尔表达式的结果,如果为true就执行循环体,
循环体结束之后,再次判断布尔表达式的结果,如果
还是true,继续执行循环体,直到布尔表达式结果
为false,while循环结束。
2、while循环有没有可能循环次数为0次?
可能。
while循环的循环次数是:0~n次。
3、 for和while完全可以互换,只不过就是语法格式不一样。
【例】 for(int i = 0; i < 10; ){
i++;
System.out.println("i --->" + i); // 1 2 3 .. 9 10
}
int i = 0;
while(i < 10){
i++;
System.out.println("i = " + i); // 1 2 3 .. 9 10
}
【语法机制】:
do {
循环体;
}while(布尔表达式);
注意:do..while循环最后的时候别漏掉“分号”!!!!!!!!!!
【执行原理】:
先执行循环体当中的代码,执行一次循环体之后,判断布尔表达式的结果,
如果为true,则继续执行循环体,
如果为false循环结束。
对于do..while循环来说,循环体至少执行1次。循环体的执行次数是:1~n次。
对于while循环来说,循环体执行次数是:0~n次。
【例】
int i = 0;
do{
//System.out.println(++i); // 1 2 3 ... 8 9 10
// 把上面那一行代码拆分为以下的两行代码。
int temp = ++i;
System.out.println(temp); // 程序执行到此处的时候i是10
}while(i < 10);
break;
continue;
return;(return语句后期讲到方法的时候再详细学习。目前先不用管。)
1、break;语句比较特殊,
特殊在:break语句是一个单词成为一个完整的java语句。
另外:continue也是这样,他俩都是一个单词成为一条语句。
2、break 翻译为折断、弄断。
3、break;语句可以用在哪里呢?
用在两个地方,其它位置不行
第一个位置:switch语句当中,用来终止switch语句的执行。
用在switch语句当中,防止case穿透现象,用来终止switch。
第二个位置:break;语句用在循环语句当中,用来终止循环的执行。
用在for当中
用在while当中
用在do....while..当中。
4、以下程序主要是以for循环为例学习break转向语句。
5、break;语句的执行并不会让整个方法结束,break;语句主要是用来终止离它最近
的那个循环语句。
【例】
// 这个for循环两次
for(int k = 0; k < 2; k++){ // 外层for
for(int i = 0; i < 10; i++){ // 内层for
if(i == 5){
break; // 这个break;语句只能终止离它最近的for
}
System.out.println("i ===> " + i);
}
}
运行结果:
i ===> 0
i ===> 1
i ===> 2
i ===> 3
i ===> 4
i ===> 0 (第二次)
i ===> 1
i ===> 2
i ===> 3
i ===> 4
6、怎么用break;语句终止指定的循环呢?
第一步:你需要给循环起一个名字,例如:
a: for(){
b:for(){
}
}
第二步:终止:break a;
【例】
// 以下讲解的内容,以后开发很少用。不要紧张。
// 这种语法很少用,了解一下即可。
a:for(int k = 0; k < 2; k++){
b:for(int i = 0; i < 10; i++){
if(i == 5){
break a; // 终止指定的循环。
}
System.out.println("i ===> " + i);
}
}
运行结果:
i ===> 0
i ===> 1
i ===> 2
i ===> 3
i ===> 4
1、continue翻译为:继续
2、continue语句和break语句要对比着学习
3、continue语句的作用是:
终止当前"本次"循环,直接进入下一次循环继续执行。
for(){
if(){ // 当这个条件成立时,执行continue语句
continue; //当这个continue语句执行时,continue下面的代码不执行,直接进入下一次循环执行。
}
// 以上的continue一旦执行,以下代码不执行,直接执行更新表达式。
code1;
code2;
code3;
code4;
}
4、continue语句后面可以指定循环吗?
可以的。
这里就不再讲了,自己测试以下。
a:for(;;更新表达式1){
b:for(;;更新表达式2){
if(){
continue a;
}
code1;
code2;
code3;
}
}
【例】
for(int i = 0; i < 10; i++){
if(i == 5){
continue;
}
System.out.println("i = " + i); // 输出i是4
}
运行结果:
i = 0
i = 1
i = 2
i = 3
i = 4 (没有5)
i = 6
i = 7
i = 8
i = 9
上一章:JavaSE 基础 - 第五章 运算符
下一章:JavaSE 基础 - 第六章 控制语句【习题练习】