您的位置:首页 > 编程语言 > Java开发

Java学习笔记——控制执行流程

2013-08-20 14:25 513 查看
本文为Java编程思想第四版的学习笔记,在此感谢作者Bruce Eckel给我们带来这样一本经典著作,也感谢该书的翻译及出版人员。本文为原创笔记,转载请注明出处,谢谢。

1.true和false

Java中,所有条件语句都利用条件表达式的真或假来决定执行路径。Java中,不允许我们讲一个数字作为布尔值使用。

2.if-else

if-else语句是控制程序流程的最基本的形式。其中else是可选的,所以可按下述两种形式来使用if:

1)if(Boolean-expression)

statement

2)if(Boolean-expression)

statement

else

statement

3.迭代

while、do-while和for用来控制循环,有时将它们划分为迭代语句。语句会重复执行,直到起作用的布尔表达式得到“假”的结果为止。Java中迭代的使用方式如下:

1)while(Boolean-expression)

statement

2)do {

statement

} while(Boolean-expression); //注意这里有分号

3)for( initialization; Boolean-expression; step)

statement

注意:在Java中有一个操作符——逗号操作符(注意不是逗号分隔符,逗号用作分隔符时用来分隔函数的不同参数),Java中唯一使用逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和不仅控制部分,可以使用一系列由逗号分隔符的语句;而且那些语句均会独立执行。通过使用逗号操作符,可以在for语句内定义多个变量,但是他们必须具有相同的类型。

4 Foreach语法

Java SE5引入了一种新的更加简洁的for语法用于数组和容器,即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。例如,假设有一个int数组a[10],我们要选取该数组中的每一个元素,可以这样写:

for( int i : n)

statement;

任何返回一个数组的方法都可以使用foreach,之后我们会看到,foreach还可以用于任何Iterable对象(迭代器对象)。

5.return

在Java中有多个关键词表示无条件分支,他们只是表示这个分支无需任何测试即可发生。这些关键词包括return、break、continue和一种与其他语言中goto类似的跳转到标号语句的方式。

return关键词有两个方面的用途:

1)制定一个方法返回什么值(嘉定他没有void返回值)

2)它会导致当前的方法退出,并返回那个值

如果在返回void的方法中没有return语句,那么在该方法的结尾处会有一个隐式的return,因此在方法中并非总是必须有一个return语句,但是,如果一个方法声明它将返回void之外的其他东西,那么必须确保每一条代码路径都有一个返回值。

6.break和continue

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

7.臭名昭著的goto

编程语言中一开始就有了goto关键词。事实上,goto起源于汇编语言的程序控制。goto语句是在源码级上的跳转,这使其招致了不好的声誉。真正的问题并不在于使用goto,而在与goto的滥用;而且少数情况下,goto还是阻止控制流程的最佳手段。

尽管goto仍是Java中的一个保留字,但在语言中并未使用它;Java没有goto,然而,Java也能完成一些类似于跳转的操作,这与break和continue两个关键词有关。它们其实不是一个跳转,而是终端迭代语句的一种方法。之所以把它们纳入goto问题中一起讨论,是有图它们使用了相同的机制:标签。

标签是后面跟有冒号的标识符,就像下面这样:

label1:

在Java中,标签起作用的唯一地方刚好是在迭代语句之前。”刚好之前“的意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者开关。这是由于break和continue关键词通常只终端当前循环,但若随同标签一起使用,它们就会中断循环,直到标签所在的地方:

label1:

outer-iteration {

inner-iteration {

//...

break; // (1)

//...

continue; // (2)

//...

continue label1; // (3)

//...

break label1; // (4)

}

}

在(1)中,break中断内部迭代,回到外部迭代。在(2)中,continue使执行点一会内部迭代的起始处。在(3)中,continue label1同时终端内部迭代以及外部迭代,直接转到label1处;随后,它实际上是继续迭代过程,但却从外部迭代开始。在(4)中,break label1也会中断所有迭代,并回到label1出,但并不重新进入迭代。也就是说,它实际上是完全终止了两个迭代。

8.switch

switch有时也被划归为一种选择语句。根据整数表达式的值(JDK1.6版本之前,switch语句所选的的表达式只能是小于int类型的。本菜鸟发现,在JDK1.7版本之中,似乎可以在此使用String),switch语句可以从一系列代码中选出一段去执行,它的格式如下:

switch (integral-selector ) {

case integral-value1 : statement; break;

case integral-value2 : statement; break;

case integral-value3 : statement; break;

//...

defalult : statement;

}

每个case均以一个break结尾,这样可以使执行流程跳转至switch主体的末尾。这是构建switch语句的一种传统方式,但break是可选的。若省略break,会继续执行后面的case语句,知道遇到一个break为止。注意,default语句没有break,因为执行流程已到了break的跳转目的地。当然,如果考虑到编程风格方面额原因,完全可以在default语句的末尾放置一个break,尽管它并没有任何实际的用处;case语句能够堆叠在一起,为一段代码形成多重匹配,即只要符合多种条件中的一种,就会执行那段特别的代码。

总结:本章仍是Java编程的基础章节,有编程基础的童鞋对这些应该是了如指掌,本菜鸟在此也只是简单的摘录了些要点,以保证体系的完整性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: