目录
if-else语句
迭代语句
for循环
for-in语法
return
break和continue
标签机制
switch
本笔记参考自: 《On Java 中文版》
Java不允许将数字作为布尔值使用,若需要在一些条件语句中使用一个非布尔值,比如if(a),那么就需要使用条件表达式将其的结果转换为布尔值,像if(a != 0)一样。
作为最基本的控制程序流程的方式,if-else语句有两种使用方式:
if(Boolean-expression)
statement
if(Boolean_expression)
statement
else
statement
其中,布尔表达式必须生成一个布尔结果,而statement是用分号进行结尾的简单语句。
public class IfElse {
static int result = 0;
static void test(int testval, int target) {
if (testval > target)
result = +1;
else if (testval < target)
result = -1;
else
result = 0;
}
public static void main(String[] args) {
test(10, 5);
System.out.println(result);
}
}
上述程序运行的结果是1。
while、do-while和for用以控制循环,被称为迭代语句。迭代语句会重复执行,直到起控制作用的布尔表达式的结果变为false。
其中,while循环的格式如下:
while(Boolean-expression)
statement
---
do-while循环和while循环的差别在于do-while中的语句至少会执行一次,无关乎其布尔表达式的结果是否为true。do-while的格式如下:
do
statement
while(Boolean-expression)
一般,while循环会比do-while循环更常用。
for循环或许是最常用的迭代形式,在第一次迭代开始前,会先进行初始化,再进行条件测试。for循环的格式如下:
for(initialization; Boolean-expression; step)
for循环由三部分组成:初始化(initialization)、布尔表达式(Boolean-expression)和步进(step)。在每次迭代前,for循环都会测试布尔表达式,若结果为false,就终止循环,否则执行以此步进。
在这里需要提到逗号操作符,因为在Java中,唯一会用到这一操作符的地方就是for循环的控制表达式,这些语句会从左到右依次执行,例如:
public class CommaOperator {
public static void main(String[] args) {
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2){
System.out.println("i = " + i + ", j = " + j);
}
}
}
程序执行的结果如下:
Java在后来引入了for-in这一更为简洁的for语法,这一语法可被用于数组和容器。for-in语句会自动生成每一项元素,这就省去了一些计数的环节。例如从一个数组中提取出其中的每一项元素:
import java.util.*;
public class ForInFloat {
public static void main(String[] args) {
Random rand = new Random(47);
float[] f = new float[10];
for (int i = 0; i < 10; i++)
f[i] = rand.nextFloat();
for (float x : f)
System.out.println(x);
}
}
程序执行的结果如下:
在上述程序中,for (float x : f)语句定义了一个float类型的变量x,然后将数组f中的每一项元素按顺序赋给x。
任何返回了数组的方法都可以使用for-in。
Java中有多个关键字表示无条件分支,包括return、break、continue和一种跳转到标签语句的方式(类似于goto)。
return关键字有两个作用:指定并返回一个方法的结果值(值不存在时返回void),并退出当前方法。若一个返回了void的方法中没有return语句,那么在该方法的结尾处会有一个隐含的return。
在任何迭代语句中,都可以使用break和continue来控制循环流程。其中:
例如:
public class BreakAndContinue {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 74) // 当i到达74时,中断循环,因此i不会到达100
break;
if (i % 9 != 0) // 只有能被9整除的数字才会被打印
continue;
System.out.print(i + " ");
}
System.out.println();
}
}
程序执行的结果如下:
编程语言中从一开始就存在goto关键字。但在大多情况下,这一关键字是被滥用的。尽管在Java中,goto是一个保留字,但是Java中没有使用它。取而代之的,Java中有一些类似的跳转的操作,这种操作使用了标签机制。其形式如下,是以冒号结尾的标识符:
label1:
Java为这一机制设置了许多限制。在Java中,唯一可以使用标签的位置是正好在迭代语句之前。使用标签的原因是为了中断深层次的循环。例如:
label1:
outer-iteration {
inner-iteration {
// ...
break; // 只能中断内层(inner)的循环,而会返回外层的循环
// ...
continue; // 只能结束一次内层的迭代,然后会进入下次的内层迭代
// ...
continue label1; // 同时中断内部与外部迭代,从label1的位置重新进入外层迭代,继续执行
//...
break label1; // 中断所有迭代,跳出外层(outer)循环
}
}
若没有这种标签,那么break和continue就只能控制当前所处层面的循环,但使用了标签后,break和continue就能控制标签所指循环的流程了。另外,如果要在中断循环时结束方法,可以直接使用return。
switch,即选择语句。可以根据整数表达式的值,从多个代码片段中选取一个进行执行。其格式类似于:
switch(selector) {
case value1:
statement;
break;
case value2:
statement;
break;
case value1:
statement;
break;
// ...
default:
statement;
}
在Java 7之前,switch的选择器(selector)只能使用整数值,像int或者char这样。但从Java 7开始,switch的选择器也允许使用字符串进行多路选择。
public class StringSwitch {
public static void main(String[] args) {
String color = "red";
switch (color) {
case "red":
System.out.println("RED");
break;
case "yellow":
System.out.println("YELLOW");
break;
case "blue":
System.out.println("BLUE");
break;
default:
System.out.println("Unknown");
}
}
}