for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。假如条件表达式的结果为假,那么它的循环语句根本不会执行。for 语句通常使用在知道循环次数的循环中。

for 语句语法格式如下所示。

for(条件表达式1;条件表达式2;条件表达式3) {
    语句块;
}

for 循环中 3 个条件表达式的含义如表 1 所示。

表 1 for 循环中 3 个表达式的含义

表达式

形式

功能

举例

条件表达式 1

赋值语句

循环结构的初始部分,为循环变量赋初值

int i=1

条件表达式 2

条件语句

循环结构的循环条件

i>40

条件表达式 3

迭代语句,通常使用

++ 或 -- 运算符

循环结构的迭代部分,通常用来修改循环

变量的值

i++

for 关键字后面括号中的 3 个条件表达式必须用“;”隔开。for 循环中的这 3 部分以及大括号中使循环体必需的 4 个组成部分完美地结合在一起,简单明了。

for 循环语句执行的过程为:首先执行条件表达式 1 进行初始化,然后判断条件表达式 2 的值是否为 true,如果为 true,则执行循环体语句块;否则直接退出循环。最后执行表达式 3,改变循环变量的值,至此完成一次循环。接下来进行下一次循环,直到条件表达式 2 的值为 false,才结束循环
值得指出的是,for 循环的循环迭代语句并没有与循环体放在一起,因此即使在执行循环体时遇到 continue 语句结束本次循环,循环迭代语句也一样会得到执行。

for 循环和 while、do while 循环不一样:由于 while、do while 循环的循环迭代语句紧跟着循环体,因此如果循环体不能完全执行,如使用 continue 语句来结束本次循环,则循环迭代语句不会被执行。但 for 循环的循环迭代语句并没有与循环体放在一起,因此不管是否使用 continue 语句来结束本次循环,循环迭代语句一样会获得执行。

与前面循环类似的是,如果循环体只有一行语句,那么循环体的大括号可以省略。

例如,同样是计算 5 的阶乘,使用 for 循环的实现代码如下:

1. public static void main(String[] args) {

2. int result = 1;
3. for (int number = 1; number <= 5; number++) {

4. result *= number;
5. }
6. System.out.print("5 的阶乘结果是:" + result); // 输出"5的阶乘结果是:120"
7. }

上述语句的含义可以理解为,将 number 变量的值从 1 开始,每次递增 1,直到大于 5 时终止循环。在循环过程中,将 number 的值与当前 result 的值进行相乘。

for 语句中初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。下面对这些情况依次进行介绍。

1.条件表达式 1 为空

for 语句中条件表达式 1 的作用可以在程序的其他位置给出,所以当条件表达式 1 为空时,for 语句后面括号内其他条件表达式执行的顺序不变。

例如,使用 for 语句的这种形式计算 1~100 所有奇数的和。

1. public static void main(String[] args) {

2. int result = 0;
3. int number = 1; // 相当于for语句的第1个表达式
4. for (; number < 101; number++) {

5. if (number % 2 != 0) // 如果不能整除2,说明是奇数,则进行累加
6. result += number;
7. }
8. System.out.print("100 以内所有奇数和为:" + result);
9. }

执行后的输出结果如下:

100 以内所有奇数和为:2500