Administrator
发布于 2023-01-16 / 7 阅读
0
0

Java入门(四)——流程控制

概述

在Java程序中,JVM默认总是顺序执行以分号;结束的语句。但是,在实际的代码中,程序经常需要做条件判断、循环,因此,需要有多种流程控制语句,来实现程序的跳转和循环等功能。

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:

  1. 顺序结构
  2. 分支结构
  3. 循环结构

顺序结构

JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。

顺序结构是最简单的算法结构。

简单来说,就是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的, 是任何一个算法都离不开的一种基本算法结构。

分支结构

分为两种:if...else if...else和switch...case

if单分支

if(布尔表达式){
//如果布尔表达式为true将执行的语句
}

意义:if语句对条件表达式进行一次测试,若测试为真,则执行下面的语句,否则跳过该语句。

if双分支

if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}

意义:当条件表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。

if多分支

if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}

if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况。

使用 ifelse ifelse 语句的时候,需要注意下面几点:

  • if 语句至多有 1 else 语句,else 语句在所有的 else if 语句之后。
  • if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
  • 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。

if嵌套

if(布尔表达式 1){
  //如果布尔表达式 1的值为true执行代码
  if(布尔表达式 2){
    //如果布尔表达式 2的值为true执行代码
  }
}

所有的流程控制语句都可以互相嵌套,互不影响。

switch结构

switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

switch(expression){
  case value :
  //语句
  break; //可选
  case value :
  //语句
  break; //可选
  //你可以有任意数量的case语句
  default : //可选
  //语句
}

switch case 语句有如下规则:

  • switch 语句中的变量类型可以是: byteshortint 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现 才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现break 语句。
  • switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。

如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。如果后续的 case 语句块有 break 语句则会跳出判断。

循环结构

顺序结构的程序语句只能被执行一次。如果您想要执行重复性的操作,就需要使用循环结构。

Java中有三种主要的循环结构:

  • while 循环
  • do…while 循环
  • for 循环

Java5中引入了一种主要用于数组的增强型for循环。

while循环

while( 布尔表达式 ) {
//循环内容
}

条件表达式返回值类型为boolean类型,只要条件表达式的结果为true,则会一直执行语句块。特点是先判断,再执行,注意避免造成死循环。

do while循环

do {
//代码语句
}while(布尔表达式);

先执行do对应的语句块,然后再判断循环条件,只要循环条件满足,则一直执行循环体,否则结束循环。特点是先执行,再判断。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

for循环

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

for循环执行的次数是在执行前就确定的。语法格式如下:

for(初始化; 布尔表达式; 更新) {
//代码语句
}

关于 for 循环有以下几点说明:

  1. 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  2. 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  3. 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
  4. 再次检测布尔表达式。循环执行上面的过程。

当然for循环也支持循环嵌套,比如常规的打印九九乘法表,三角形图案等。

增强for循环

for(声明语句 : 表达式)
{
  //代码句子
}

增强for循环由java5引进,主要用于数组或集合的遍历

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组或集合名,或者是返回值为数组或集合的方法。

流程跳转

break

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。

break 跳出最里层的循环,并且继续执行该循环下面的语句。

continue

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

for 循环中,continue 语句使程序立即跳转到更新语句。

while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

多层循环

在多层循环,break/continue 默认只会控制当前的循环,如果想要跳出/跳转到外层循环,可以使用label标签。

label1: for(...){...
    label2: for(...){...
        label3: for(...){...
            if(true){
                break label2;  
            }
            ...
        } 
    } 
}

return

return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。

三者对比

一、作用不同

1、break:执行break操作,跳出所在的当前整个循环,到外层代码继续执行。

2、continue:执行continue操作,跳出本次循环,从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。

3、return:执行return操作,直接返回函数,结束函数执行,所有该函数体内的代码(包括循环体)都不会再执行。

二、结束不同

1、break:不仅可以结束其所在的循环,还可结束其外层循环,但一次只能结束一种循环。

2、continue:结束的是本次循环,将接着开始下一次循环。

3、return:同时结束其所在的循环和其外层循环。

三、紧跟不同

1、break:需要在break后紧跟一个标签,这个标签用于标识哪个外层循环;也可以不带参数,在循环体内,强行结束循环的执行,结束当前整个循环;总的来说:就近原则,结束当前整个循环。

2、continue:在continue后不需要加参数。

3、return:在return后需要紧跟一个返回值,用于提供给对应方法所需的返回值;也可以不带参数,不带参数就是返回空,其主要目的用于中断函数执行,返回调用函数处。


评论