【Java基础教程】第9讲,Java程序的控制逻辑——流程控制
1 前言
任何一门语言都需要基本的流程控制语句,其思想也符合人类判断问题或做事的逻辑过程。什么是流程控制呢?流程就是做一件事情的顺序,或者说是次序。在程序设计中,流程就是要完成一个功能,而流程控制则是指如何在程序设计中控制完成某种功能的次序。本章将介绍Java语言中关于“流程控制”的使用方法。
2 条件语句
流程控制中最基本的就是条件执行,也就是说,一些操作只能在某些条件满足的情况下才执行,在一些条件下执行某种操作,在另外一些条件下执行另外的操作。Java分支语句主要分为下述两种。
2.1 if
条件语句是一个重要的编程语句,用于告诉程序在某个条件成立的情况下执行某段语句,而在另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”。如果该表达式返回的结果为true,则执行其后的语句;如果为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if…else语句和if…else if多分支语句。
语法1:
if(条件判断表达式){
语句1
}
说明:在if后面的条件语句中,必须是一个可以转换成boolean型的表达式,这个表达式需要用括号括起来。当表达式的值为true时执行语句1。
语法2:
if(条件判断表达式){
语句1
}
else{
语句2
}
说明:表达式为true时执行语句1,表达式为false时执行语句2
语法3:
if(条件判断表达式1){
语句1
}
else if(条件判断表达式2){
语句2
}
else if(条件判断表达式3){
语句3
}
...
else if(条件判断表达式n)
{
语句N
}
else{
语句N
}
说明:表达式1为true时执行语句1,表达式1为false时判断表达式2,表达式2为true时执行语句2,表达式2为false时判断表达式3,如此直至表达式n为false,则执行最后一个else后的语句n。
2.2 switch
在进行多重选择的时候,过多if-else-if条件选择语句的嵌套会造成程序维护上的困扰。在Java语言中提供了switch条件选择语句,使用它可以让程序更加简洁清楚。与if条件选择语句不同的是,switch只有一个条件判断表达式。switch是一种多选一的条件选择语句,它是按照条件判断表达式的运算结果来决定在多个程序分支中选择其中之一的程序分支,并执行这个程序分支内的程序代码。switch条件选择语句的语法如下:
switch (表达式) {
case 数值1:语句1;break;
case 数值2:语句2;break;
case 数值3:语句3;break;
...
default:语句0;
}
说明:switch的表达式类型为整型(包括byte、short、char、int等)、字符类型及枚举类。switch语句将从与选项值相匹配的case标签处开始执行直到遇到break语句,或者执行到switch语句的结束处为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。
3 循环语句
所谓循环,就是多次重复执行某些类似的操作,这个操作一般不是完全一样的操作,而是类似的操作。循环语句是程序开发非常重要,也是使用频率很高的一个技能点。在Java中,循环有4种形式,分别是while、do/while、for和foreach。
3.1 while
while 循环的形式是:
while(布尔表达式) {
语句块; //可以是单条语句, 也可以是复合语句
}
执行语句会在每一次循环前,判断布尔表达式返回值是否为 true。
3.2 do-while
do-while循环语句的一般格式如下:
do{
语句块;
} while(布尔表达式);
do…while语句与while语句不同的是,它先执行大括号内的循环体,再判断条件,如果条件不满足,下次不再执行循环体。也就是说,在判断条件之前,就已经执行大括号内的循环体。
3.3 for
for 循环可能是最常用的迭代形式。 该循环在第一次迭代之前执行初始化。随后,它会执行布尔表达式,并在每次迭代结束时,进行某种形式的步进。for 循环的形式是:
for(初始化表达式;循环条件;迭代语句) {
循环体;
}
初始化语句是循环的初始状态,循环条件是条件判断的布尔表达式,如果表达式的值为true,则执行后面的语句,接下来执行后面的迭代语句。如果条件判断表达式第一次求值就为false,那么for循环不会进行任何的迭代,后面的循环体和迭代语句也不会执行任何操作。
一次循环结束后,下一次循环开始前,执行迭代部分的语句,然后判断循环条件表达式的值,决定是否进行下一次循环。
3.4 for-in
Java 5 引入了更为简洁的“增强版 for 循环”语法来操纵数组和集合。for-in 语法可以节省我们编写代码的时间。 更重要的是,它提高了代码可读性以及更好地描述代码意图而不是详细说明这操作细节。for-in的语句格式如下:
for(元素类型 元素变量 : 遍历对象){
循环体;
}
大部分文档也称其为 for-each 语法,但因为了不与 Java 8 新添的 forEach() 产生混淆,因此我称之为 for-in 循环。
4 循环控制
在任何迭代语句的主体内,都可以使用 break 和 continue 来控制循环的流程。 其中,break 表示跳出当前循环体。而 continue 表示停止本次循环,开始下一次循环。
4.1 break
break语句通常用在循环语句和开关语句中,例如用在开关语句switch中,break语句可以使程序跳出switch而执行switch以后的语句,以防止程序进入死循环而无法退出。当break语句用于do…while、for、while循环语句中时,可使程序终止循环。
4.2 continue
continue语句用来略过循环中剩下的语句,停止当前迭代,重新开始新的循环,这和break语句的完全跳出循环是不一样的。continue仅仅出现在while、do…while、for语句的子语句块中。也可以使用标签来选择需要终止的嵌套循环的层级。
5 码农洞见
5.1 GOTO语句有害论
程序之所以能够按照人们的意愿执行,主要依靠的是程序的控制结构。早期的程序员广泛使用GOTO语句,它破坏了程序设计结构性,导致程序流程的混乱,使理解和调试程序都产生困难。1968年Dijkstra等人发表了著名的论文《GOTO语句有害论》,即“所有有意义的程序流程都可以使用三种基本的结构来构成”。自此人们的编程方式发生重大变化正是这个原因,在Java程序设计中,虽然goto作为关键字保留了下来,但是一直没有启用。
5.2 结构化程序设计
结构化程序设计(Structured programming)是一种经典的编程模式,它强调用模块化、积木式的方法来建立程序。采用结构化程序设计方法,可使程序的逻辑结构清晰、层次分明、可读性好、可靠性强,从而提高了程序的开发效率,保证了程序质量,改善了程序的可靠性。
一般来说程序的结构包含以下3种。
(1)顺序结构。
(2)选择结构。
(3)循环结构。
这3种不同的结构有一个共同点,就是它们都只有一个入口,也只有一个运行出口。这些单一的入口、出口可让程序可控、易读、好维护。
为初学者提供学习指南,为从业者提供参考价值。分享绘画与编程。洞见就在其中~