前言
在 Java 中,控制语句涉及的关键字包括 if-else,while,do-while,for,return,break 和选择语句 switch。恰当的使用控制语句会使你的代码结构更加清晰赏心悦目,就如人的身材一样!
if-else 语法
在Java中,比较常见的条件语句格式如如下所示:
if(condition) {
“statement”
}
或
if(condition) {
“statement”
}
else
“statement”
或
if(condition) {
“statement”
}else if(condition){
“statement”
}else
“statement”
其中 else 是可选的。else if并非新关键字,它仅是else后紧跟的一条新if语句.
循环语句
while,do-while 和 for 用来控制循环语句。只有控制循环的布尔表达式计算结果为 false,循环语句才会停止。
while 语法
当条件为true时,while循环执行一条语。常用的格式为:
while(Boolean-expression)
statement
执行语句会在每一次循环前,判断布尔表达式返回值是否为 true。下例可产生随机数,直到满足特定条件。
do-while 语法
do-while 的格式如下:
do
statement
while(Boolean-expression);
while 和 do-while 之间的唯一区别是:即使条件表达式返回结果为 false, do-while 语句也至少会执行一次。在 while 循环体中,如布尔表达式首次返回的结果就为 false,那么循环体内的语句不会被执行。实际应用中,while 形式比 do-while 更为常用。
for 语法
for 循环可能是最常用的迭代形式。该循环在第一次迭代之前执行初始化。随后,它会执行布尔表达式,并在每次迭代结束时,进行某种形式的步进。for 循环的形式是:
for(initialization; Boolean-expression; step)
statement
初始化 (initialization) 表达式、布尔表达式 (Boolean-expression) ,或者步进 (step) 运算,都可以为空。每次迭代之前都会判断布尔表达式的结果是否成立。一旦计算结果为 false,则跳出 for 循环体并继续执行后面代码。每次循环结束时,都会执行一次步进。
在 Java 中逗号运算符(这里并非指我们平常用于分隔定义和方法参数的逗号分隔符)仅有一种用法:在 for 循环的初始化和步进控制中定义多个变量。我们可以使用逗号分隔多个语句,并按顺序计算这些语句。注意:要求定义的变量类型相同。
for-in 语法
Java 5 引入了更为简洁的“增强版 for 循环”语法来操纵数组和集合。大部分文档也称其为 for-each 语法,但因为了不与 Java 8 新添的 forEach() 产生混淆,因此我称之为 for-in 循环。
for-in 无需你去创建 int 变量和步进来控制循环计数。下面我们来遍历获取 float 数组中的元素。代码示例:
import java.util.*;
/**
* @author: 码农洞见
*/
public class ForInDoubleCase {
public static void main(String[] args) {
Random rand = new Random(34);
double[] d = new double[5];
for(int i = 0; i < 5; i++)
d[i] = rand.nextDouble();
for(double c : d)
System.out.println(c);
}
}
输出结果:
0.7282803491116691
0.32686830519411947
0.7463400680511447
0.018838172746085124
0.7038639881861897
上例中我们展示了传统 for 循环的用法。接下来再来看下 for-in 的用法。代码示例:
for(float x : f) {
这条语句定义了一个 float 类型的变量 x,继而将每一个 f 的元素赋值给它。
任何一个返回数组的方法都可以使用 for-in 循环语法来遍历元素。例如 String 类有一个方法 toCharArray(),返回值类型为 char 数组,我们可以很容易地在 for-in 循环中遍历它。代码示例:
/**
* @author: 码农洞见
*/
public class ForInStringCase {
public static void main(String[] args) {
for(char c: "Hello Manon's insight".toCharArray())
System.out.print(c + " ");
}
}
输出结果:
H e l l o M a n o n ' s i n s i g h t
return 语法
在 Java 中有几个关键字代表无条件分支,这意味无需任何测试即可发生。这些关键字包括 return,break,continue 和跳转到带标签语句的方法,类似于其他语言中的 goto。
return 关键字有两方面的作用:1.指定一个方法返回值 (在方法返回类型非 void 的情况下);2.退出当前方法,并返回作用 1 中值。我们可以利用 return 的这些特点来改写上例 IfElse.java 文件中的 test() 方法。代码示例:
/**
* @author: 码农洞见
*/
public class WithReturnCase {
static int compare(int source, int target) {
if(source > target)
return +1;
if(source < target)
return -1;
return 0;
}
public static void main(String[] args) {
System.out.println(compare(1, 2));
System.out.println(compare(2, 1));
System.out.println(compare(1, 1));
}
}
输出结果:
1
-1
0
这里不需要 else,因为该方法执行到 return 就结束了。
break 和 continue 语法
在任何迭代语句的主体内,都可以使用 break 和 continue 来控制循环的流程。其中,break 表示跳出当前循环体。而 continue 表示停止本次循环,开始下一次循环。
下例向大家展示 break 和 continue 在 for、while 循环中的使用。代码示例:
/**
* @author: 码农洞见
*/
public class BreakAndContinueCase {
public static void main(String[] args) {
for(int i = 0; i < 100; i++) {
if(i == 88) break; // 跳出循环
if(i % 9 != 0) continue; // 下一次循环
System.out.print(i + " ");
}
}
输出结果:
0 9 18 27 36 45 54 63 72 81
在这个 for 循环中,i 的值永远不会达到 100,因为一旦 i 等于88,break 语句就会中断循环。通常,只有在不知道中断条件何时满足时,才需要 break。因为 i 不能被 9 整除,continue 语句就会使循环从头开始。这使 i 递增)。如果能够整除,则将值显示出来。
swich 语法
switch源于C语言用在编程中,是一个判断选择代码(有时也被划归为一种选择语句)。其功能就是控制流程流转的。switch 语句可以从一系列代码中选出一段去执行。它的格式如下:
switch(integral-selector) {
case integral-value1 : statement; break;
case integral-value2 : statement; break;
case integral-value3 : statement; break;
// ...
default: statement;
}
其中,integral-selector (整数选择因子)是一个能够产生整数值的表达式,switch 能够将这个表达式的结果与每个 integral-value (整数值)相比较。若发现相符的,就执行对应的语句(简单或复合语句,其中并不需要括号)。若没有发现相符的,就执行 default 语句。
在上面的定义中,大家会注意到每个 case 均以一个 break 结尾。这样可使执行流程跳转至 switch 主体的末尾。这是构建 switch 语句的一种传统方式,但 break 是可选的。若省略 break, 会继续执行后面的 case 语句的代码,直到遇到一个 break 为止。通常我们不想出现这种情况,但对有经验的程序员来说,也许能够善加利用。注意最后的 default 语句没有 break,因为执行流程已到了 break 的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在 default 语句的末尾放置一个 break,尽管它并没有任何实际的作用。
switch 语法规则
switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
- 只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
- switch()的参数类型不能为实型 。
- case 标签必须为字符串常量或字面量。
- case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。
switch 语法糖
Java 7 增加了在字符串上 switch 的用法。其实就是一个逻辑扩展的语法糖。新的编码方式能使得结果更清晰,更易于理解和维护。
总结
本文主要是把Java编程中的控制语句进行了总结。在语言设计之初,许多决策都是基于让编译器设计者的体验更好。但在现代语言设计中,许多决策都是为了提高语言使用者的体验。技术在发展,语言也在与时俱进,因此,我们程序员应该要知其然,知其所以然。
最后的最后
为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!