JavaSE 基础 - 第六章 控制语句

JavaSE 基础 - 第六章 控制语句

  • 1、控制语句-概述
  • 2、选择语句/分支语句 if
  • 3、选择语句/分支语句 switch
  • 4、循环语句 for 、while、 do..while..
    • 4.1、for循环
    • 4.2、while循环
    • 4.3、do..while循环
  • 5、转向语句 break、 continue、 return
    • 5.1 break;语句
    • 5.2 continue;语句
  • 传送门

1、控制语句-概述

1.1、控制语句的作用

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

1.2、控制语句包括几类?
   3类:
      选择语句
      循环语句
      转向语句

1.3、选择语句(或者 分支语句、条件语句)
      if语句
      switch语句

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

1.5、转向语句
      break
      continue
      return(这个目前先不需要学习,后面讲方法的时候会使用。)

2、选择语句/分支语句 if

   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、选择语句/分支语句 switch

3.1 switch语句的语法格式

switch(){
case1:
	java语句;
	java语句;...
	break;
case2:
	java语句;
	java语句;...
	break;
case3:
	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、循环语句 for 、while、 do…while…

4.0 什么是循环语句,为什么要使用这种语句?

   因为在现实世界当中,有很多事情都是需要反复/重复的去做。
   对应到程序当中,如果有一块代码需要重复执行,此时为了减少代码量,我们使用循环语句

4.1、for循环

【语法机制】:
	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();
			}
		}
	}

4.2、while循环

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
	}

4.3、do…while循环

【语法机制】:
	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);

5、转向语句 break、 continue、 return

   break;
   continue;
   return;(return语句后期讲到方法的时候再详细学习。目前先不用管。)

5.1 break;语句

	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

5.2 continue;语句

	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 基础 - 第六章 控制语句【习题练习】

你可能感兴趣的:(JavaSE)