控制语句

控制语句的出现可以让我们的程序具有逻辑性/条理性,可以使用控制语句来实现一个“业务”了。

控制语句包括3类:
选择语句
循环语句
转向语句

选择语句也可以叫做分支语句:
if语句
switch语句

循环语句:主要循环反复的去执行某段特定的代码块
for循环
while循环
do…while…循环

转向语句
break
continue
return

if

if语句的语法结构以及运行原理:
if语句是分支语句,也可以叫做条件语句。
if语句的语法格式:
第一种写法:

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语句;
	}....

第四种写法:

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、控制语句和控制语句之间是可以嵌套的,但是嵌套的时候大家最好一个语句一个语句进行分析,不要冗杂在一起分析。

案例:

public class IfTest02{
	public static void main(String[] args){
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.print("请输入年龄:");
		int age = s.nextInt();
		String str = "老年"; // 字符串变量默认值是“老年”
		if(age < 0 || age > 150){
		System.out.println("对不起,年龄值不合法");
		// 既然不合法,你就别让程序往下继续执行了,怎么终止程序执行
		//return;
		} else if(age <= 5){
			str = "婴幼儿";
		} else if(age <= 10){
			str = "少儿";
		} else if(age <= 18){
			str = "少年";
		} else if(age <= 35){
			str = "青年";
		} else if(age <= 55){
			str = "中年";
		} 
		System.out.println(str);

	}
}

switch

1、switch语句也是选择语句,也可以叫做分支语句。

2、switch语句的语法格式
switch(值){
case 值1:
java语句;…
break;
case 值2:
java语句;…
break;
case 值3:
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、switch语句的执行原理
拿“值”与“值1”进行比较,如果相同,则执行该分支中的java语句,然后遇到"break;"语句,switch语句就结束了。

如果“值”与“值1”不相等,会继续拿“值”与“值2”进行比较,如果相同,则执行该分支中的java语句,然后遇到break;语句,switch结束。

注意:如果分支执行了,但是分支最后没有“break;”,此时会发生case穿透现象。

所有的case都没有匹配成功,那么最后default分支会执行。

for循环

for循环的语法机制以及运行原理:
语法机制:

for(初始化表达式; 条件表达式; 更新表达式){
		循环体; // 循环体由java语句构成
		java语句;
		....
	}
注意:
			第一:初始化表达式最先执行,并且在整个循环中只执行一次。
			第二:条件表达式结果必须是一个布尔类型,也就是:true或false
		执行原理:
			先执行初始化表达式,并且初始化表达式只执行1次。
			然后判断条件表达式的结果,如果条件表达式结果为true,则执行循环体。
			循环体结束之后,执行更新表达式。
			更新完之后,再判断条件表达式的结果,
			如果还是true,继续执行循环体。

直到更新表达式执行结束之后,再次判断条件时,条件为false,
for循环终止。

更新表达式的作用是:控制循环的次数,换句话说,更新表达式会更新某个变量的值,这样条件表达式的结果才有可能从true变成false,从而终止for循环的执行,如果缺失更新表达式,很有可能会导致死循环。

while

1、while循环的语法机制以及执行原理
语法机制:

while(布尔表达式){
		循环体;
}

执行原理:
判断布尔表达式的结果,如果为true就执行循环体,循环体结束之后,再次判断布尔表达式的结果,如果还是true,继续执行循环体,直到布尔表达式结果为false,while循环结束。

2、while循环有没有可能循环次数为0次?
可能。
while循环的循环次数是:0~n次

do…while

do…while循环语句的执行原理以及语法机制:
语法机制:

do {
				循环体;
			}while(布尔表达式);

注意:do…while循环最后的时候别漏掉“分号”

执行原理:
先执行循环体当中的代码,执行一次循环体之后,判断布尔表达式的结果,如果为true,则继续执行循环 体,如果为false循环结束。

对于do…while循环来说,循环体至少执行1次。循环体的执行次数是:1~n次。
对于while循环来说,循环体执行次数是:0~n次。

break;

1、break;语句比较特殊,特殊在:break语句是一个单词成为一个完整的java语句。
另外:continue也是这样,他俩都是一个单词成为一条语句。

2、break 翻译为折断、弄断。

3、break;语句可以用在两个地方,其它位置不行
第一个位置:switch语句当中,用来终止switch语句的执行。
用在switch语句当中,防止case穿透现象,用来终止switch。

第二个位置:break;语句用在循环语句当中,用来终止循环的执行。
用在for当中
用在while当中
用在do…while…当中。

4、break;语句的执行并不会让整个方法结束,break;语句主要是用来终止离它最近
的那个循环语句。

5、怎么用break;语句终止指定的循环呢?
第一步:你需要给循环起一个名字,例如:

a: for(){
	b:for(){
				
			}
}
第二步:终止:break a;

continue;

1、continue翻译为:继续
2、continue语句和break语句要对比着学习
3、continue语句的作用是:
终止当前"本次"循环,直接进入下一次循环继续执行。

 for(){
  if(){ // 当这个条件成立时,执行continue语句
  continue; //当这个continue语句执行时,continue下面的代码不执行,直接进入下一次循环执行。
  }
  // 以上的continue一旦执行,以下代码不执行,直接执行更新表达式。
  code;…
  }

4、continue语句后面可以指定循环吗?
可以的。
这里就不再讲了,自己测试以下。

a:for(;;更新表达式1){
	b:for(;;更新表达式2){
		if(){
			continue a;
		}
		code;...
	}
}