流程控制

就像任何有感知的生物一样,在Java这个编程世界里面,我们也可以控制自己的程序,让他判断和选择。正如诗中所说鱼我所欲也 熊掌亦我所欲也 舍鱼而取熊掌者也 生我所欲也 义亦我所欲也 舍生而取义者也。

如果一段JAVA代码中没有任何的流程控制语句,那么这段代码就会从上而下执行,那么我们说这段代码就是顺序结构。在Java里面我们执行控制的语句有分支结构,其中分支结构最常见的就是if-else和switch这样的语句.。

if-else是最常见的流程控制形式,其中else是可选的。

每个if判断里面都会根据布尔表达式来返回真(true)或假(false),我们说对比两个基本类型是否相等的时候用==,比较两个复合类型的值的时候用equals来比较。

if(布尔表达式){

执行语句

}else{

}

if里面必须的返回一个布尔表达式的结果,其中执行语句可以是一个以分号为结尾的简单语句,也可以是一个复合语句。

接下来再看一下循环控制语言:

do - while 循环 

while(布尔表达式){

执行语句

}

在循环刚开始的时候会计算一次布尔表达式,没执行一次循环过后都会再执行一次布尔表达式,只有布尔表达式为false的时候

才不会执行里面的语句。

do

语句

while(布尔表达式)

执行语句

}

do -while 与while最大的区别就是不管while里面的语句之不执行,do里面的语句至少会执行一次。

for循环

for循环会在程序反复之前执行一段初始化,

他会执行里面的for(循环变量初始化;布尔表达式;迭代)

每次执行for循环里面语句的时候都会执行去判断一下布尔表达式的值,如果不为false,就执行下面的语句,当我们的执行语句都执行

完成后会计算一次步进;

Java 里
唯一用到逗号运算符的地方就是for 循环的控制表达式。在控制表达式的初始化和步进控制部分,我们可使
用一系列由逗号分隔的语句。而且那些语句均会独立执行。前面的例子已运用了这种能力,下面则是另一个例子


这样的循环结构也是没有问题的,但是实际意义并不是很大;

在任何循环语句的主体部分,亦可用break 和continue 控制循环的流程。其中,break 用于强行退出循环,
不执行循环中剩余的语句。而continue 则停止执行当前的反复,然后退回循环起始和,开始新的反复。

如果我们想直接退出循环则可以用一个return;

Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。  
 在return语句的各类文章中,大多仅仅介绍了return语句用于有返回值(非void返回值)的方法中。而很少或没有介绍return语句在vodi返回值方法中的运用。  
 return语句用在非void返回值类型的方法中,不但能返回基本类型,还可以返回(包括用户自定义类的)对象。

goto 关键字很早就在程序设计语言中出现。事实上,goto 是汇编语言的程序控制结构的始祖:“若条件A,
则跳到这里;否则跳到那里”。若阅读由几乎所有编译器生成的汇编代码,就会发现程序控制里包含了许多
跳转。然而,goto 是在源码的级别跳转的,所以招致了不好的声誉。若程序总是从一个地方跳到另一个地
方,还有什么办法能识别代码的流程呢?随着Edsger Dijkstra 著名的“Goto 有害”论的问世,goto 便从此
失宠。
事实上,真正的问题并不在于使用goto,而在于goto 的滥用。而且在一些少见的情况下,goto 是组织控制
流程的最佳手段。
尽管goto 仍是Java 的一个保留字,但并未在语言中得到正式使用;Java 没有goto。然而,在break 和
continue 这两个关键字的身上,我们仍然能看出一些goto 的影子。它并不属于一次跳转,而是中断循环语
句的一种方法。之所以把它们纳入goto 问题中一起讨论,是由于它们使用了相同的机制:标签。

对Java 来说,唯一用到标签的地方是在循环语句之前。进一步说,它实际需要紧靠在循环语句的前方——在
标签和循环之间置入任何语句都是不明智的。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另
一个循环或者一个开关。这是由于break 和continue 关键字通常只中断当前循环,但若随同标签使用,它们
就会中断到存在标签的地方;

同样的规则亦适用于while:
(1) 简单的一个continue 会退回最内层循环的开头(顶部),并继续执行。
(2) 带有标签的continue 会到达标签的位置,并重新进入紧接在那个标签后面的循环。
(3) break 会中断当前循环,并移离当前标签的末尾。
(4) 带标签的break 会中断当前循环,并移离由那个标签指示的循环的末尾。

“开关”(Switch)有时也被划分为一种“选择语句”。根据一个整数表达式的值,switch 语句可从一系列
代码选出一段执行。它的格式如下:
switch(整数选择因子) {
case 整数值1 : 语句; break;
case 整数值2 : 语句; break;
case 整数值3 : 语句; break;
case 整数值4 : 语句; break;
case 整数值5 : 语句; break;
//..
default:语句;

其中,“整数选择因子”是一个特殊的表达式,能产生整数值。switch 能将整数选择因子的结果与每个整数
值比较。若发现相符的,就执行对应的语句(简单或复合语句)。若没有发现相符的,就执行default 语
句。
在上面的定义中,大家会注意到每个case 均以一个break 结尾。这样可使执行流程跳转至switch 主体的末
尾。这是构建switch 语句的一种传统方式,但break 是可选的。若省略break,会继续执行后面的case 语
句的代码,直到遇到一个break 为止。尽管通常不想出现这种情况,但对有经验的程序员来说,也许能够善
加利用。注意最后的default 语句没有break,因为执行流程已到了break 的跳转目的地。当然,如果考虑
到编程风格方面的原因,完全可以在default 语句的末尾放置一个break,尽管它并没有任何实际的用处。
switch 语句是实现多路选择的一种易行方式(比如从一系列执行路径中挑选一个)。但它要求使用一个选择
因子,并且必须是int 或char 那样的整数值。例如,假若将一个字串或者浮点数作为选择因子使用,那么它
们在switch 语句里是不会工作的。对于非整数类型,则必须使用一系列if 语句。

总结:以上内容大部分翻译之java编程思想一书。在我们平常开发的过程中,用的最多的就是for循环和while循环,里面用

if-else来控制分支。不推荐使用标签跳转,这样会影响程序的可读性。

你可能感兴趣的:(流程控制)