Java编程思想——控制执行流程
来源:互联网 发布:图瓦共和国知乎 编辑:程序博客网 时间:2024/05/18 03:31
4.控制执行流程
java使用了c所有的控制流程语句,涉及到的关键字有:if-else、while、do-while、for、return、break以及选择语句break.java并不支持goto语句。
4.1true和false
条件语句都利用条件表达式的真或假来决定执行路径。前面介绍的关系操作符都可以用来构造条件表达式。
4.2if-else
if-else是最基本的控制程序流程的形式,其中else是可选的,相关的形式有:
if(boolean-exp){ statement;}
或者
if(boolean-exp){ statement;}else{ statement;}
亦或者
if(boolean-exp){ statement;}else if(boolean-exp){ statement;}else if(boolean-exp){ statement;}......
4.3迭代
while、do-while、for用来控制循环,语句会重复执行,直到控制作用的布尔表达式得到假的结果位置。
while的循环表达式格式:
while(boolean-exp){ statement;}
循环刚开始时会计算一次布尔表达式;在语句的下一次迭代开始前再计算一次。
4.3.1do-while
do-while的格式:
do{ statement;}while(boolean-exp);
与while循环语句的差别是多执行一次。
4.3.2 for
for循环可能是最长用到的迭代形式,这种迭代在第一次要进行初始化,随后进行条件测试,在每次迭代结束前进行某种形式的步进,其格式为:
for(initialization;boolean-exp;step){ statement;}
具体实例如下,求1到10的整数和
int res = 0;for(int i = 1;i<=10;i++){ res+=i;}System.out.println(res);
其中i的作用范围仅在for循环的范围内,
4.3.3逗号操作符
java中唯一用到逗号操作符的地方是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列的逗号分隔语句。
for(int i = 1,j=i+10;i<5;i++,j=i*2){ System.out.pringln(j);}
定义多个变量的这种能力只限于for循环使用。
4.4 foreach语法
Java SE5引入了更简洁的for语法用于数组和容器。不必创建int变量去对由访问项构成的序列进行计数,foreach自动产生每一项。
例如遍历一个float数组
public class ForEachFolat{ public static void main(String[]args){ Random rand = new Random(47); float[]f=new float[10]; for(int i=0;i<10;i++){ f[i] = rand.nextFloat(); } for(float x:f){ System.out.println(x); } }}
即定义了一个float类型的变量x,将数组f的每一个元素值赋予x,对x进行操作。
从上述例句可以看到foreach的格式为:
for(datatype tempName:Name){ statement;}
使用foreach,要事先存在该数组或对象才可以。foreach使得录入代码变得更简洁,阅读更容易。
4.5 return
return关键字有两个方面的用途:一方面指定一个方法返回什么值,另一方法它会导致当前方法的退出,并返回那个值。
如果在void的方法中没有一个return语句,该方法的结尾处会有一个隐式的return,因此在方法中并非一定要有一个return语句。如果一个方法不是void,则一定要存在return语句,确保方法有返回。
4.6 break和continue
在任何迭代语句的主体部分都可以使用break和continue,其中使用break强行退出循环,不执行循环中的剩余语句,而continue则是停止执行当前的迭代,退回到循环起始处,开始下一次迭代。
//: control/BreakAndContinue.java// Demonstrates break and continue keywords.import static net.mindview.util.Range.*;public class BreakAndContinue { public static void main(String[] args) { for(int i = 0; i < 100; i++) { if(i == 74) break; // Out of for loop if(i % 9 != 0) continue; // Next iteration System.out.print(i + " "); } System.out.println(); // Using foreach: for(int i : range(100)) { if(i == 74) break; // Out of for loop if(i % 9 != 0) continue; // Next iteration System.out.print(i + " "); } System.out.println(); int i = 0; // An "infinite loop": while(true) { i++; int j = i * 27; if(j == 1269) break; // Out of loop if(i % 10 != 0) continue; // Top of loop System.out.print(i + " "); } }} /* Output:0 9 18 27 36 45 54 63 720 9 18 27 36 45 54 63 7210 20 30 40*///:~
4.7 goto
goto起源于汇编语言的程序控制:“条件A成立,则跳到这里,否则跳到那里”。goto语句是在源码级上跳转,若一个程序总是从一个地方跳到另一个地方,有什么办法能够识别程序的控制流程。
goto是java的一个保留字,在语言中并未使用它;java没有使用goto,但是也可以完成goto的功能,使用了标签的机制。
标签是后面带有冒号的标识符,例如:
label1:
利用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处;随后它继续迭代,不过是从外部迭代开始,相当于等价一个break;在(4),break label1中断了所有迭代,并回到了label1,但不重新进入迭代,即完全中断了两个迭代。
//: control/LabeledFor.java// For loops with "labeled break" and "labeled continue."import static net.mindview.util.Print.*;public class LabeledFor { public static void main(String[] args) { int i = 0; outer: // Can't have statements here for(; true ;) { // infinite loop inner: // Can't have statements here for(; i < 10; i++) { print("i = " + i); if(i == 2) { print("continue"); continue; } if(i == 3) { print("break"); i++; // Otherwise i never // gets incremented. break; } if(i == 7) { print("continue outer"); i++; // Otherwise i never // gets incremented. continue outer; } if(i == 8) { print("break outer"); break outer; } for(int k = 0; k < 5; k++) { if(k == 3) { print("continue inner"); continue inner; } } } } // Can't break or continue to labels here }} /* Output:i = 0continue inneri = 1continue inneri = 2continuei = 3breaki = 4continue inneri = 5continue inneri = 6continue inneri = 7continue outeri = 8break outer*///:~
如果想在中断循环的同时退出方法,可以使用一个return语句即可。
这些规则同样适用于while。
4.8 switch
switch被归划为一种选择语句,根据整数表达式,switch从一系列代码中选出一段去执行。格式为:
switch(变量){ case 常量1: 语句; break; case 常量2: 语句; break; ... default: 语句; break;}
每个case都以一个break结尾,可以使执行流程跳转到switch主体末尾,这个是可选的,如果省略了break,则继续执行下面的case语句。如果case中没有相符合的语句,则执行default语句。
switch(表达式)中的返回值必须是:byte,short,char,int,枚举,String,没有long类型;case子句中的值必须是常量,且所有case值应该是不同的。
下面例子是随机生成字母,判断是元音字母还是辅音字母。
//: control/VowelsAndConsonants.java// Demonstrates the switch statement.import java.util.*;import static net.mindview.util.Print.*;public class VowelsAndConsonants { public static void main(String[] args) { Random rand = new Random(47); for(int i = 0; i < 100; i++) { int c = rand.nextInt(26) + 'a'; printnb((char)c + ", " + c + ": "); switch(c) { case 'a': case 'e': case 'i': case 'o': case 'u': print("vowel"); break; case 'y': case 'w': print("Sometimes a vowel"); break; default: print("consonant"); } } }} /* Output:y, 121: Sometimes a voweln, 110: consonantz, 122: consonantb, 98: consonantr, 114: consonantn, 110: consonanty, 121: Sometimes a vowelg, 103: consonantc, 99: consonantf, 102: consonanto, 111: vowelw, 119: Sometimes a vowelz, 122: consonant...*///:~
switch语句的执行效率比if稍微高一些,具体数值不多的时候建议使用switch语句,对区间的判断使用if语句更方便。
- Java 编程思想—— 第四章 控制执行流程
- Java编程思想读书笔记——控制执行流程
- Java编程思想——控制执行流程
- 4控制执行流程-Java编程思想
- java编程思想之控制执行流程
- Java编程思想-04控制执行流程
- java编程思想之控制执行流程
- Java编程思想第四版读书笔记——第四章 控制执行流程
- Java编程思想笔记——第四章 控制执行流程
- 四.控制执行流程——Java编程思想第4版学习笔记
- 重读《Java编程思想》之三:控制执行流程
- Java编程思想第4章:控制执行流程
- JAVA编程思想第四篇の控制执行流程
- JAVA编程思想-第四章 控制执行流程
- Java编程思想第4章:控制执行流程
- 《JAVA编程思想》笔记-操作符&控制执行流程
- 《Java编程思想》读书笔记4.控制执行流程
- 《Java编程思想》第四章 控制执行流程
- if条件语句sed命令
- 单端队列---->循环队列
- Oc MJRefresh 的使用
- 快速整数分解C#
- 虚拟机,没你想的那么难!
- Java编程思想——控制执行流程
- 关于图像压缩实验
- Angularjs多种服务
- AVLTree二叉平衡搜索树
- 备忘录
- python 网络编程(udp数据报)
- 生活随笔:程序员1024节日
- 关于学习java回头复习的几个遗漏点
- Spring定时任务的几种实现方式