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

Java初窥门径

  1. Java万物皆对象,带你进入编程之旅!
  2. Java运算符,操纵数据全靠它!
  3. Java控制流程,保持身材尤为重要!
  4. Java初始化和清理,控制安全是首要!
  5. Java封装是为了更好的重构!
  6. JavaOOP优雅总是会有回报!
  7. Java接口和抽象类如何选择!
  8. Java集合,日常开发掌握这些就够了
  9. Java不要再问String为什么是不可变的!

前言

程序必须在执行过程中控制它的世界并做出选择。 在 Java 中,你需要执行控制语句来做出选择。

在 Java 中,涉及的关键字包括 if-else,while,do-while,for,return,break 和选择语句 switch。

true和false

所有的条件语句都利用条件表达式的“真”或“假”来决定执行路径。举例:
a == b。它利用了条件表达式 == 来比较 a 与 b 的值是否相等。 该表达式返回 true 或 false。代码示例:

/**
* @author: 码农洞见
*/
public class TrueFalseCase {
	public static void main(String[] args) {
        System.out.println(1 == 0);
		System.out.println(1 == 1);
	}
}

输出结果:

 false 
 true

注意:在 Java 中使用数值作为布尔值是非法的,即便这种操作在 C/C++ 中是被允许的。如果想在布尔测试中使用一个非布尔值,那么首先需要使用条件表达式来产生 boolean 类型的结果,例如 if(a != 0)。

if-else

if-else 语句是控制程序执行流程最基本的形式。 其中 else 是可选的,因此可以有两种形式的 if。else if并非新关键字,它仅是else后紧跟的一条新if语句。

if(condition) {
    “statement” 
}

if(condition) {
 	“statement”
}
else
 	“statement”

if(condition) {
	“statement”
}else if(condition){
 	“statement”
}else
 	“statement”

迭代语句

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: "An African Swallow".toCharArray())
      System.out.print(c + " ");
  }
}

输出结果:

A n   A f r i c a n   S w a l l o w

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 String 语法糖

Java 7 增加了在字符串上 switch 的用法。其实就是一个逻辑扩展的语法糖。新的编码方式能使得结果更清晰,更易于理解和维护。

总结

在语言设计之初,许多决策都是基于让编译器设计者的体验更好。 但在现代语言设计中,许多决策都是为了提高语言使用者的体验。下面通过思维导图回归一下Java控制流程的知识内容。
在这里插入图片描述

最后的最后

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农洞见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值