内容


第 8 单元:条件运算符和控制语句

在代码中做决定

Comments

开始之前

本单元是 “Java 编程入门” 学习路径的一部分。尽管各单元中讨论的概念具有独立性,但实践组件是在您学习各单元的过程中逐步建立起来的,推荐您在继续学习之前复习 前提条件、设置和单元细节

单元目标

  • 知道何时和如何使用关系运算符、条件运算符和控制语句
  • 了解变量范围的概念和它的基本规则
  • 熟悉三元运算符

关系和条件运算符

Java 语言提供了运算符和控制语句,可在代码中使用它们来制定决策。代码中的决策通常从一个布尔表达式(一个计算为 truefalse 的表达式)开始。这些表达式使用关系运算符(用于将一个操作数与另一个操作数比较)和条件运算符

表 1 列出了 Java 语言中的关系和条件运算符。

表 1. 关系和条件运算符
运算符用法返回 true 的条件……
>a > ba 大于 b
>=a >= ba 大于或等于 b
<a < ba 小于 b
<=a <= ba 小于或等于 b
==a == ba 等于 b
!=a != ba 不等于 b
&&a && b如果 ab 均为 true,则有条件地计算 b(如果 a 为 false,则不计算 b
||a || bab 为 true,则有条件地计算 b(如果 a 为 true,则不计算 b
!!aa 为 false
&a & bab 均为 true,则始终计算 b
|a | b如果 ab 为 true,则始终计算 b
^a ^ bab 不同

if 语句

有了大量运算符后,是时候使用它们了。此代码展示了在将一种逻辑添加到 Person 对象的 getHeight() 访问方法时发生的情况:

public int getHeight() {
  int ret = height;
  // If locale of the computer this code is running on is U.S.,
  if (Locale.getDefault().equals(Locale.US))
    ret /= 2.54;// convert from cm to inches
  return ret;
}

如果当前的地区是在美国(未使用公制),可能将 height(以厘米为单位)的内部值转换为英寸更有意义。这个(人为设计的)示例演示了 if 语句的使用,它计算圆括号内的一个布尔表达式。如果该表达式计算为 true,那么程序会执行下一个语句。

在本例中,仅在运行代码的计算机的 LocaleLocale.US 时,才需要执行一条语句。如果需要执行多条语句,可以使用花括号形成一个复合语句。复合语句将多条语句分组到一个中,而且复合语句也可以包含其他复合语句。

变量范围

Java 应用程序中的每个变量都拥有范围 或局部化的命名空间,在代码中,可以在该范围内通过名称访问它。在该空间外,该变量就位于范围之外,如果尝试访问它,将得到编译器错误。Java 语言中的范围级别由声明变量的位置来定义,如清单 1 所示。

清单 1. 变量范围
public class SomeClass {
  private String someClassVariable;
  public void someMethod(String someParameter) {
    String someLocalVariable = "Hello";

    if (true) {
      String someOtherLocalVariable = "Howdy";
    }
    someClassVariable = someParameter; // legal
    someLocalVariable = someClassVariable; // also legal
    someOtherLocalVariable = someLocalVariable;// Variable out of scope!
  }
  public void someOtherMethod() {
    someLocalVariable = "Hello there";// That variable is out of scope!

  }
}

SomeClass 中,someClassVariable 可被所有实例(也即非静态)方法访问。someParametersomeMethod 内可见,但在该方法外不可见,someLocalVariable 也是如此。在 if 代码块内,声明了 someOtherLocalVariable,在 if 代码块外,它就超出了范围。出于这个原因,我们可以说 Java 拥有代码块范围,因为代码块(由 {} 限定)定义了范围边界。

范围有许多规则,清单 1 给出了最常用的规则。请花几分钟熟悉一下它们。

else 语句

有时在程序的控制流中,您可能希望仅在某个特定表达式的计算结果不为 true 时执行操作。此时使用 else 就很方便:

public int getHeight() {
  int ret;
  if (gender.equals("MALE"))
    ret = height + 2;
  else {
    ret = height;
    Logger.getLogger("Person").info("Being honest about height...");
  }
  return ret;
}

else 语句的原理与 if 相同,因为程序仅执行它遇到的下一条语句。在本例中,两条语句分组到一条复合语句中(请注意花括号),然后供程序执行。

也可以使用 else 执行一次额外的 if 检查:

if (conditional) {
  // Block 1
} else if (conditional2) {
  // Block 2
} else if (conditional3) {
  // Block 3
} else {
  // Block 4
} // End

如果 conditional 的计算结果为 true,则执行 Block 1,而且程序会跳到最后一个花括号之后的语句(由 // End 表示)。如果 conditional 的计算结果true,则计算 conditional2。如果 conditional2 为 true,则计算 Block 2,而且程序会跳到最后一个花括号之后的语句。如果 conditional2 不为 true,则程序前进到 conditional3,等等。仅在所有 3 个条件都失败时,才执行 Block 4

三元运算符

Java 语言提供了一个方便的运算符来执行简单的 if / else 语句检查。这个运算符的语法是:

(conditional) ? statementIfTrue : statementIfFalse;

如果 conditional 计算为 true,则执行 statementIfTrue;否则执行 statementIfFalse。每条语句均不允许采用复合语句形式。

如果 conditional 语句的计算结果为 true,则需要执行一条语句,如果不为 true,则执行另一条语句,在知道这种情况时,三元运算符很方便。三元运算符常常用于初始化一个变量(比如一个返回值),类似这样:

public int getHeight() {
  return (gender.equals("MALE")) ? (height + 2) : height;
}

问号后面的圆括号不是必需的,但它们会让代码更可容易理解。

进一步探索

上一单元:字符串和运算符下一单元:循环


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology
ArticleID=1038561
ArticleTitle=第 8 单元:条件运算符和控制语句
publish-date=10172016