Java控制流程,保持身材尤为重要!

前言

在 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编程中的控制语句进行了总结。在语言设计之初,许多决策都是基于让编译器设计者的体验更好。但在现代语言设计中,许多决策都是为了提高语言使用者的体验。技术在发展,语言也在与时俱进,因此,我们程序员应该要知其然,知其所以然。

最后的最后

为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容