控制流程语句
你的源文件中的语句通常情况下是根据出现的顺序从上往下执行的。 不过,控制流程,可以通过使用决策,循环以及分支结构打破这种执行流程,使你程序根据不同的情况执行特定的代码块。该章节描述了Java编程语言所持支的决策语句 (if-then
, if-then-else
, switch
),循环语句(break
, continue
, return
) 以及分支语句 (break
, continue
, return
) 。
Hello Young
你的源文件中的语句通常情况下是根据出现的顺序从上往下执行的。 不过,控制流程,可以通过使用决策,循环以及分支结构打破这种执行流程,使你程序根据不同的情况执行特定的代码块。该章节描述了Java编程语言所持支的决策语句 (if-then
, if-then-else
, switch
),循环语句(break
, continue
, return
) 以及分支语句 (break
, continue
, return
) 。
元素安抚可以用来构建计算值的_。
表达式是_的核心组件。
语句可以组织为_.
以下代码片段是一个_表达式.
|
|
语句类似与自然语言中的句子,但是不用句号左结尾,而是 用_ .
代码块是包含在_内的一组空语句或者多个语句,可以出现在任何允许出现单独代码块的地方
区分以下表达式语句的类型:
aValue = 8933.234; //
aValue++; //
System.out.println("Hello World!"); //
Bicycle myBike = new Bicycle(); //
现在你已经理解了变量和运算符,是时候表现真正的技术了,哦不是时候学习表达式,语句,代码块 expressions, statements, and blocks了.运算符可以用来构成表达式,计算值;表达式时语句的核心部件;语句可以被组织为代码块。
表达式 是由变量,运算符,以及方法调用按照Java语言的语法组成的结构,最终球的一个单独的值。已经见到过表达式的例子,参考下面的代码:
|
|
表达式返回值的数据类型取决于表达式使用的元素。表达式 cadence = 0
返回 int
因为赋值运算符返回其左边的操作因子相同的数据类型;再本例中, cadence
是一个int
. 就像你看到的其他表达式一样,表达式也可以返回其他数据类型的值,例如 boolean
或者 String
.
Java编程语言允许你使用各种各样的小表达式作为一小部分来构建混合表达式,只要数据类型取其他部分匹配。下面是一个混合表达式的例子:
|
|
在这个特定的例子里,表达式计算的顺序并不重要,以为乘法计算的结果不依赖计算顺序,结果始终一致,不管你如何计算。然而,并不是所有的表达式都不需要考虑顺序。例如,以下表达式,你先计算加法或者除法得到的结果时不一样的:
|
|
你可以使用小括号(和)来严格区分表达式的执行顺序。例如:想要让上面的表达式无歧义,你可以这样写:
|
|
如果你没有明确的指示运算符的运算顺序,则运算顺序由运算符默认的优先级来确定。拥有更高优先级的运算符,将会有限运算。例如:除法比加法拥有更高的优先级。因此以下两个表达式的运算结果时一样的:
|
|
当书写复合表达式时,用小括号明确指示那一个运算符先进行计算。这么做可以时代码更加易读和易于管理。
语句可以大致理解为自然语言中的句子。一个语句勾构成了一个完整的执行单元。以下类型的表达式以 (;
)分号结束可以组成语句。
++
or --
这些语句被成为表达式语句expression statements. 以下时一些表达式语句的例子。
|
|
除了表达式语句之外,还有另外两种语句:声明语句,和控制流程语句( declaration statements and control flow statements). 声明语句声明一个变量,你已经见过很多例子:
|
|
最后,控制流程语句控制语句被执行的规则。下一章节你将会学到更多控制流程相关的内容Control Flow Statements.
代码块是包含在花括号内的一组空语句或者多个语句,可以出现在任何允许出现单独代码块的地方。以下是代码块的示例代码, BlockDemo
:
|
|
一下快速参考总结了Java编程语言所支持的运算符。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
观察以下代码片段.
|
|
包含了那些运算符?
观察以下代码片段.
|
|
i
和 n
的值应该是什么?++i)
),取代后置自增操作符 (i++
), i
and n
的最终值应该是什么?为了反转一个boolean
, 应该使用哪一个操作符?
哪一个运算符是位了比较两个对象的值, =
还是 ==
?
解释后面的代码片段: result = someCondition ? value1 : value2;
将一下代码改变位符合运算符为变量赋值:
|
|
以下代码中,解释 “6”为什么被打印了两次:
|
|
Java编程语言同样提供了完整的位运算以及位移运算运算符。因为本节所讨论的运算符并不常用。因此简单介绍,目的只是为了让你意识到这些运算符的存在。
一元位运算符补码运算 “~
“ 反转一个位的形式;可以用于任意一个整形类型,将每一个“0”变为“1”,将每一个“1”变为“0”。例如,一个byte
包含8位;将该操作符应用到形如”00000000”的值将得到 “11111111”.
有符号的左位移运算符 “<<
“ 将一个位组向左移动,有符号的右位移运算付”>>
“将一个位组向右移动。位组为运算符左边的操作因子, 移动位置的数目为运算符右边的操作因子。无符号的右位移运算符 “>>>
“ 在最左的位置上加入一个0,而 ">>"
之后的最左位置则要取决于符号的扩展。
位运算 &
符号表示 位与运算。
位运算 ^
符号表示位异或运算。
位运算 |
符号表示位或运算。下面的程序, BitDemo
, 使用的位与运算并且将结果打印了出来.
|
|
相等以及关系运算符确定一个运算银子是大于,小于,等于,或者不等于另一个。这些操作符大多数你可能都看起来很熟悉。注意判断两个原始值是否相等的时候一定要使用 “==
“, 而不是 “=
“.
|
|
下面的程序 ComparisonDemo
,测试了比较操作符:
|
|
输出结果:
|
|
运算符 &&
和 ||
代表了两个布尔表达式的逻辑与和逻辑或运算。这两个操作符都表现”短路”行为,意味着第二个操作因子仅在试用的时候才进行计算。
|
|
下面程序, ConditionalDemo1
, 测试了操作因子:
|
|
另外一个条件运算符 ?:
, 可以看作是 if-then-else
(在控制流程部分讨论 )语句块的简写 .该操作符也被称为三元运算符因为他使用了三个操作因子。下面的例子中,该操作符可以读作: “如果 someCondition
是 true
, 将 value1
的值赋给result
. 否则的话,将 value2
的值赋值给 result
.”
下面的程序, ConditionalDemo2
, 测试了三元运算符?:
:
|
|
因为 someCondition
是 true,这个程序打印了 “1” . 使用 ?:
运算符代替 if-then-else
语块可以使你的代码可读性更高; 例如当表达式比较紧凑又没有附加结果(赋值的时候).
instanceof
运算符那一个对象与具体的类进行对比。你可以使用它来测试对象是否是某个类的实例,是否是子类的实例,或者是否为实现了某个结构的类的实例。
下面的程序 InstanceofDemo
,定义了一个父类 (类名 Parent
),一个简单的接口 (接口名 MyInterface
), 以及一个继承了父类并实现了接口的子类 (类名 Child
) .
|
|
输出结果:
|
|
使用的 instanceof
运算符的时候, 注意 null
不是任何类的实例.
你会碰到最常用的赋值运算符之一是”=
“.你再Bicycle类中看到过;它将右边的值分配给左边的运算对象:
|
|
该运算符同样适用于对象来指定对象引用,创建对象章节中中会讨论到。
Java编程语言提供了加减乘除运算符。你可以通过基础数学运算中对应的运算符号来识别他们。唯一一个新符号是”%
“,用来一个数除以另一个数之后的余数作为它的结果。
Operator | Description |
---|---|
+ |
加法运算 (同样用于字符串连接) |
- |
减法运算 |
* |
乘法运算 |
/ |
除法运算 |
% |
取模运算 |
现在你已经学习了如何声明和初始化变量,或许你想知道如何对他们做些什么。学习Java编程语言的运算符是一个开始的好地方。运算符是特殊的符号,用来对一个,两个,或者三个运算对象进行特殊的操作人后返回一个结果。
当我们探索Java编程语言的运算符时,提前制动哪一个运算符具有更高的优先级或许会有帮助。下面列表中的运算符时根据优先级的顺序列出的。靠近上面出现的运算符具有更高的优先级。优先级较高的运算符会在相对级别较低的运算符之前计算。出现在同一行的运算符优先级相等。当相同优先级的运算符出现在同一个表达式中,规则必须规定哪一个先进行计算。所有的二元运算符除了赋值运算符都是从左向右计算;赋值运算符从右向左计算。
Operators/运算符 | Precedence/优先级 |
---|---|
postfix 后缀运算符 | *expr*++ *expr*-- |
unary 一元运算符 | ++*expr* --*expr* +*expr* -*expr* ~ ! |
multiplicative 乘法运算 | * / % |
additive 加减运算 | + - |
shift 位移运算 | << >> >>> |
relational 关系运算 | < > <= >= instanceof |
equality 等式运算 | == != |
bitwise AND 位运算与 | & |
bitwise exclusive OR 位运算异或 | ^ |
bitwise inclusive OR 位运算或 | | |
&& |
|
logical OR 逻辑或 | || |
ternary 三元运算符 | ? : |
assignment 赋值运算符 | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
一般在编程中,某些运算符比其他一些出现的更加频繁;例如,赋值运算符=
比无符号右位移运算符>>>
要常见的多.因此在接下来的讨论中,将先关注更可能在基本常规中使用的的运算符,结尾的时候再介绍不太常用的。每一部分附有可以编译运行的代码,学习这些程序的输出可以加深理解。