几乎所有的编程语言都会提供基本的流程控制语句,像分支结构和循环结构。分支结构用于实现根据条件来选择性地执行某段代码,循环结构用于实现根据循环条件重复的执行某段代码。Java提供if和switch两种分支语句,还有for,while,do… while三种循环结构。其中for循环包含了一般的for循环和JDK5加入的foreach循环。
一. 顺序结构
循环结构是java最基本的结构,像C语言,C++等都符合顺序结构的执行方式,当然C语言中的goto语句,破坏了顺序结构的执行方式,允许开发者任意跳转,所以有言好男人不用goto语句。Java里同时将goto语句列为保留字,也许在未来可能去实现它,至少目前为止还没有goto语句的实现。顺序结构就是程序自上而下逐行地执行,中间没有任何的判断和跳转。
二. 分支结构
Java中提供两种常见的分值控制结构,if语句和switch语句,其中if语句使用布尔表达式或者布尔值作为判断条件进行控制;switch语句则对多个整型值进行匹配实现控制。
1. if条件语句
if语句在书上都是被认为是三种形式,事实上我觉得第三种形式同时包含了前两种情况,if语句的形式为:
if (logic expression)
{
statement…
}
else if (logic expression)
{
ststement…
}
else
{
statement…
}
其中else if和else都是可以根据实际情况增加删减的。在上面if的括号里放的是逻辑表达式,结果为true则执行,结果为false则不执行。if下的执行语句如果只有一条,大括号是可以省略的,但是从程序逻辑性和可读性的角度,最好一直保留着。如果三行代码一块钱,这样一块钱就到手了。
if语句比较容易理解,有个地方需要注意,注意条件的包含性
publicclass ScoreTest
{
public static void main(String [] args)
{
int score = 93;
if (score > 60)
{
System.out.println("及格");
}
else if (score > 70)
{
System.out.println("中等");
}
else if (score > 80)
{
System.out.println("良好");
}
else if (score > 90)
{
System.out.println("优秀");
}
else
{
System.out.println("不及格");
}
}
}
表面看起来上面的程序没有问题,应该输出为优秀,但是输出为及格。因为第一个表达式的范围涵盖了后面的所有表达式,if的嵌套规则应该是从最小到最大,这样才能保证逻辑性不容易出错。
2. switch语句
switch语句由一个控制语句和多个case标签语句构成,switch语句后的表达式只能是byte,short,char,int,枚举类型和java.lang.String类型(JDK新加入),不能是boolean类型。switch语句的的格式如下:
switch(expression)
{
case condition1:
{
statement...
}
case condition2:
{
statement...
}
....
default :
{
statement...
}
}
使用switch语句时,有两个值得注意的地方:第一个地方是switch后面的表达式的数据类型只能是byte,short,int四个整型,枚举类型,和String字符串。第二个地方是case语句块需要有break语句。
三. 循环结构
循环语句可以在满足一个循环条件的情况下,反复执行一段代码,这段被重复的代码被称为循环体。当反复执行这个循环体时,需要在合适的时候把循环条件改为假,从而循环结束。循环语句通常包含四个部分:
1. 初始化语句(init)
2. 循环条件(expression)
3. 循环体(body)
4. 迭代语句(iteration)
3.1 while 循环语句
While循环语句的语法格式如下:
[init] int i = 0, sum = 0;
while(expression) while(i<100)
{ {
body… sum += i;
[iteration] i++;
} }
While循环每次对expression表达式做判断,结果为true则执行循环体。反之,结果为false跳出循环。
3.2 do while循环语句
do while循环和while循环的功能基本相似,区别在于do while循环先执行循环在做判断,而while循环先做判断在执行循环体。do while循环的语法格式如下:
[init] int i = 0, sum = 0;
do do
{ {
body… sum += i;
[iteration] i++;
}while(expression); }while(i<100);
从上面可以看出while和do while的实际区别在于do while语句的循环体至少会被执行一次,而while语句则不一定会被执行。另外就是do while语句之后的while后面有分号,而while语句的后面有分号就成了空循环。空循环一般用于延时的程序。
3.3 for 循环
for循环是更加简洁的循环语句,一般可以用来代替while循环和do while循环,其基本格式如下:
for ([init] ; [expression] ; iteration)) for(int i=0 , sum=0 ; i<100 ;i++)
{ {
statement.. sum += i;
} }
程序在执行for循环时,先执行循环的的初始化语句,初始化语句实在循环开始前执行一次。每次循环之前判断expression的值,如果循环条件返回true,则执行循环体部分,循环体执行结束之后执行循环迭代语句。
值得注意的是,for循环的循环迭代语句没有和循环体放在一起,因此在执行循环体时遇到continue结束本次循环,循环迭代语句也会被执行。
for循环同时还包括foreach循环,而这个循环主要用来遍历数组或者集合,放在后面学习。
四. 控制语句
4.1 break语句
在某些时候,我们需要在某种条件出现时终止循环,而不是等到循环条件为false时再退出循环,此时可以借助break语句完成这个功能。break语句用来结束一个循环,跳出循环体。break语句不仅可以跳出循环,同时也可以跳出指定的循环体,如下所示。
public classBreakTest
{
public static void main(String[] args)
{
outer:
for (int i= 0 ; i < 10 ;i++ )
{
System.out.println("i= " + i);
for (int j=0 ; j <5; j++)
{
System.out.println("j= " + j);
if (j == 2)
{
breakouter;
}
}
}
}
}
4.2 continue语句
continue语句与break语句非常类似,他是跳出当前循环继续执行下一次循环。continue也可以进行跳出标签的功能,读者可以自己尝试一下只需要将上面的程序中的break换成continue即可。
4.3 return 语句
return语句是指跳出当前的方法,不管return语句处在多少层循环嵌套之中,都能跳出方法。