文章目录

  • 前言
  • 1.顺序结构
  • 2.分支结构
  • 2.1 if语句
  • 2.2 switch 语句
  • 3.循环结构
  • 3.1 while循环
  • 3.2 do while循环
  • 3.3 for循环
  • 3.4 控制循环结构
  • 3.4.1 break
  • 3.4.2 continue
  • 3.4.3 return


前言

李刚老师《JAVA疯狂讲义》第5版,第4章学习笔记。

1.顺序结构

如果没有其他流程控制语句,JAVA方法中的语句就是顺序结构,从上至下执行。

2.分支结构

JAVA中提供了两种分支结构:if语句和switch语句。

2.1 if语句

if语句的完整形式如下:

if(logic expression){
	//这里可以有多个statement
	statement;
}
// else if 语句可以有0个或者多个
else if(logic expression) {
	statement;
}
//else语句可以省略,最多有一个
else{
	statement;
}

注意

  1. if后面括号中的logic expression必须是一个逻辑表达式,返回值只能是true或false
  2. 在使用if else语句时,一定要首先处理条件范围更小的情况,例如:
public class demo{
	public static void main(String[] args){
		int age = 45;
		if(age > 20){
			System.out.println("青年人");
		}
		else if (age > 40){
			System.out.println("中年人");
		}
		else if (age > 60){
			System.out.printlin("老年人");
		}
	}
}

这段代码的输出结果将是:青年人。
原因是,45>20,满足第一个条件,会执行第一个if的代码块中的语句。同时,else if(age > 40)的条件包含了age <= 20,也就是说,第二个代码块是否执行,判断的条件为:age > 40 && age<= 20,这个条件将永远不会被满足,因此不会执行相应的代码块的内容。因此上述代码应修改为:

public class demo{
	public static void main(String[] args){
		int age = 45;
		if(age > 60){
			System.out.println("老年人");
		}
		else if (age > 40){
			System.out.println("中年人");
		}
		else if (age > 20){
			System.out.printlin("青年人");
		}
	}
}

2.2 switch 语句

switch语句的完整形式如下:

switch (expression)
{
	case condition1:
	{
		statement;
		break;
	}
	case condition2:
	{
		statement;
		break;
	}
	...
	case conditionN:
	{
		statement;
		break;
	}
	default{
		statement;
	}
}

switch语句的执行逻辑为:
首先求出表达式expression的值,然后和每一个condition匹配,如果匹配成功则执行相应的代码块,如果失败则执行最终的default下面的代码块。

注意

  1. switch语句中,每个case标签最好在最后都加上一条break语句。如果不加入break语句,则会把后方所有case标签内的代码块一起执行。并且在JAVA11之后,不加入break语句,JAVA在编译时也会出现警告。
  2. switch语句后面的expression表达的数据类型只能为:byte、short、char、int、String和枚举类型(类似于一个常量)。

3.循环结构

循环语句可以让程序在满足某个循环条件的情境下,反复执行一段代码。一个循环语句包含以下4部分:

  1. 初始化语句(init_statement):用于初始化工作,在循环开始之前执行
  2. 循环条件(test_expression):布尔类型表达式,决定是否执行循环体
  3. 循环体(statement):循环语句主体,如果循环条件允许,则循环体将重复执行
  4. 迭代语句(iter_statement):用于更改循环控制变量,使得循环在合适的时候结束

3.1 while循环

while循环语法格式:

init_statement
while(test_expression){
	statment;
	iter_statment;
}

while循环执行逻辑:

  1. 初始化变量数据
  2. 计算循环条件test_expression,判断true还是false
  3. 若为false,终止循环
  4. 若为true,执行循环体statement和迭代语句iter_statement

注意:

  1. 使用while循环时,一定要保证,循环条件有变成false的时候,否则将会变成死循环。
  2. while循环条件的后面不要加分号,在JAVA中,分号代表空语句,不做任何事,如果while的循环条件后面加分号,则也会变成死循环。

3.2 do while循环

do while循环语法格式

init_statement;
do
{
	statement;
	iter_statement;
}while(test_expression);

与while不同,do while语句是先执行循环体,再判断循环条件,因此循环体至少会被执行一次。

3.3 for循环

大部分情况下,for循环可以代替while、do while循环,其基本语法格式如下:

for(init_statement;test_expression;iter_statement){
	statement;
}

for循环的执行逻辑:

  1. 执行循环初始化语句init_statement,该初始化语句只会在每次循环开始前执行一次。
  2. 计算循环条件test_expression的值,若为false,则不执行循环体,若为true则执行循环体statement。
  3. 循环体执行结束后,执行循环迭代语句iter_statement。

注意:
1.for循环中,可以指定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式,如:

public class demo{
	public static void main(String args[]){
		for(int a = 0, s = 0 , p = 0 ; a < 10 && b < 10 && c < 10;a++){
			System.out.println("循环执行");
			}
	}
}

上方代码中,初始化语句定义了三个变量,但是由于for循环只允许使用一个初始化语句,因此这三个变量的数据类型一定是相同的。

2.最好不要在循环体内修改循环变量,容易出现死循环等错误。若循环必须访问循环变量,则建议重新定义一个临时变量,将循环变量的值赋值给临时变量,对临时变量做相应处理。

3.在for循环的初始化条件中定义的变量,作用域仅在该循环内有效,for循环终止后,将无法访问这些变量。

4.无论是while、do while还是for循环,都可以嵌套,可以是两层、三层、四层…不论如何嵌套,总可以把内层循环当作外层循环的循环体来对待。

3.4 控制循环结构

JAVA提供了break和continue来控制循环结构,除此之外,return可以结束整个方法,因此也可以用来控制循环。

3.4.1 break

break用于完全结束一个循环,不管是哪种循环,一旦在循环体中遇到break,则系统将完全结束该循环,例如:

public class demo{
	public static void main(String args[]){
		for(int i = 0; i < 10 ; i ++){
			if(i = 4){
				break;	
			}
		}
	}
}

同时,break不仅可以用于结束其所在的循环,也可以结束外层循环,但是需要外层循环的标签。JAVA中的标签就是一个紧跟着英文冒号:的标识符,并且JAVA中的标签只有放在循环语句之前才有作用,例如:

public class demo{
	public static void main(String args[]){
		outer:
		for(int i = 0; i < 10; i ++){
			for (int j  = 0; j < 10; j ++){
				if(i*j == 6){
					break outer;
				}
			}
		}
	}
}

outer就是外层循环的标签,break可以直接跳出外层循环。通常来讲,break之后的标签,必须在break所在的循环的外层循环之前定义才有意义。

3.4.2 continue

continue与break不同,它只忽略本次循环剩下的语句,会继续下一次循环,并不会终止循环。同时,continue后面也可以紧跟一个标签,用以直接进行外层循环的下一次循环,例如:

public class demo{
	public static void main(String args[]){
		outer:
		for(int i = 0; i < 10; i ++){
			for (int j  = 0; j < 10; j ++){
				if(i*j == 6){
					continue outer;
				}
			}
		}
	}
}

当满足continue的条件时,会直接进行外层循环的下一次循环。

3.4.3 return

严格来说,return并非专门用于循环控制语句的,但是由于return可以结束一个方法,因此可以直接终止方法中的循环。