【啃透Java基础知识】4Java流程控制
参考资料:《Java 核心技术卷 I》
本章介绍了关于Java流程控制相关的知识。
Java流程控制
Java程序默认是按顺序流程执行的,但编写者可以使用特定的流程控制语句来控制代码执行的顺序。
块
什么是块?
块是由用大括号括起来的若干条Java语句组成的。如下
|
|
块确定了变量的作用域,在块中声明的变量只能在该块中使用。
块也可以嵌套,但嵌套的块中不能重复声明同名变量,如下是错误的:
|
|
条件控制
if-else语句
条件语句即
if(condition)statement
其中当表达式condition
的值为true时,执行statement
语句。
statement
可以使用块来实现执行多条语句。
条件语句还可以如:
if(condition)statement1 else statement2
其中当表达式condition
的值为true时,执行statement1
语句,否则执行statement2
语句。
可以对多个if else语句进行组合:
if(condition1)statement1 elseif(condition2) statement2 ... else statementn
switch语句
switch语句的基本格式如下:
|
|
其中choice
的类型要与case
后的常量相匹配,case
后的常量的类型可以是:
- char,byte,short或int的表达式。
- 枚举常量
- 字符串字面量
- 多个字符串,用逗号分隔
除此之外,switch语句还有一种形式:
|
|
可以很容易注意到,这两种形式之间的不同不仅是case
后的连接符号不同,即:
和->
,还可以看见第二种形式中执行代码块内没有break语句。
我们先要弄清楚,:
形式的switch语句存在一个叫直通的问题。
当:
形式的switch语句中某个case
的代码块不存在break语句,程序在执行完对于的代码块后并不会停止执行并跳出switch语句,而是会接着执行下一个case
对应的代码块,直到遇到一个break语句或者执行完default
的代码块,而这种现象就叫做直通。这种情况往往不是我们想要看到的,因此通常会在每一个case
对应的代码块的末尾添加一个break语句。
->
形式的switch语句便没有直通的问题。
switch语句不仅可以用作一般的语句,还可以当成表达式来使用。
|
|
可以注意到,switch语句用作表达式时,往往要返回一个值,因此使用->
形式的switch语句可以直接在->
后接返回值。若想用块来执行多条语句,则需要使用yield关键字来表明返回的值。
:
形式的switch语句也可以用作表达式,如何返回一个值呢?需要使用yield关键字来表明返回的值。需要注意的yield可以替代break实现中断操作。循环控制
循环语句
基本的循环语句有三种:
while(condition) statement;
do statement while(condition);
for(declaration; condition; iteration) statement
其中while语句和do while语句都是当condition
为true时,循环执行statement
。
区别是while语句先进行条件的判断,而do while语句先执行一次statement
再进行条件的判断。
for语句有三个部分,其中第一部分declaration
为控制循环的变量的声明,condition
为控制循环的条件判定,iteration
为控制循环变量的迭代。
所有的statement
都可以用块来实现多语句执行。
还有一个特殊的循环语句,即for each循环:
for(variable : collection) statement
for each循环可以用来依次处理数组或其他元素集合中的每个元素而不必考虑索引值,它将给定的变量variable
设置为集合中的每一个元素(类型需要匹配),然后执行statement
。其中collection
必须是一个数组或是一个实现了Iterable接口的类对象。
循环中断语句
- break语句,会中断当前的循环。利用标签可以实现中断外围循环,如
|
|
- continue语句,会跳过当前循环。利用标签可以实现跳过外围循环,如
|
|