(一)程序流程
Java程序语句执行的顺序包括4种基本控制结构:顺序结构、选择结构、循环结构和异常处理逻辑结构。
1、顺序结构
在Java程序中,语句执行的基本顺序按各语句出现的位置先后顺序执行,称之为顺序结构,如图所示,先执行语句块1,在执行语句块2,最后执行语句块3,三者是顺序执行关系。
2、选择结构
(1)if语句
if条件语句包含多种形式,单分支,双分支和多分支,其流程如下:
- 单分支
语法形式如下:
if(条件表达式)
语句/语句块;
- 双分支
语法形式如下:
if(条件表达式)
语句/语句块1;
else
语句/语句块2;
- 多分支
语法形式如下:
if(条件表达式1)
语句/语句块1;
else if(条件表达式2)
语句/语句块2;
...
...
...
else if(条件表达式n)
语句/语句块n;
else
语句/语句块n+1;]
(2)switch语句
对于多重分支,虽然可以使用嵌套的if语句实现,但是如果分支较多,程序可读性较差,此时可利用switch语句。switch语句是抑恶个控制语句,它通过将控制传递给其体内的case语句来处理多个选择和枚举。
switch语句的语法如下:
switch(控制表达式){
case(常量表达式)1:
语句序列1;
break;
case 常量表达式2:
语句序列2;
break;
...
...
case 常量表达式n:
语句序列n;
break;
default:
语句序列n+1;
break;
}
说明:
(1)switch语句基于控制表达式的值选择要执行的语句分支。switch语句按以下顺序执行。
- 控制表达式求值。
- 如果case标签后的常量表达式的值恰好等于控制表达式的值,控制将转到匹配的case标签后的语句序列。
- 如果case标签后的常量表达式的值不等于控制表达式的值,且存在一个default标签,则控制将转到default标签后的语句序列。
- 如果case标签后的常量表达式的值不等于控制表达式的值,且不存在一个default标签,则控制将跳出switch语句执行后继语句。
(2)控制表达式所允许的数据类型:整数类型(byte、short、int)、字符类型(char)或者枚举类型,即只能为可隐式转换为int的类型和枚举类型。case标签后的常量表达式只能为常数或常量,不能为变量。
(3)每一个case标签后的常量表达式的值都不能相同,其中值相同的不同常量。
(4)各个case子句出现的次序不影响语句的执行结果。
(5)一个switch语句最多只能有一个default标签。虽然switch结构中的case可以按任意顺序放置,但是一般建议将default放在最后。
(6)和if-else语句不同的是,在执行一个case子句后面的语句序列后,switch语句并不会终止,要退出switch语句,必须使用一个跳转语句。一般情况下,跳转语句是break,当到达的break语句时,结束switch语句的执行。
示例如下:
public static void Switch(char n)
{
System.out.println("请输入A,B,C,D,E:");
switch(n)
{
case 'A':
System.out.println("90--100");
break;
case 'B':
System.out.println("80--90");
break;
case'C':
System.out.println("70--80");
break;
case'D':
System.out.println("60--70");
break;
case'E':
System.out.println("60分以下");
break;
default:
System.out.println("输入错误!");
break;
}
}
3、循环结构
(1)for循环
for循环语句时记数型循环语句,一般用于已知循环次数的情况,所以也称为定次循环。
基本语法如下:
for(初始化设置表达式;循环执行条件;循环变量的增减量){
循环语句序列;
}
执行顺序为:初始化设置表达式–>循环执行条件–>循环语句序列–>循环变量的增减量
注意: 循环变量的增减量可以写在循环语句序列中。
for循环只作用于for(初始化设置表达式;循环执行条件;循环变量的增减量) 后面的大括号的范围内。
(2)while循环
与for循环一样,while也是一个预测试的循环,但是while在循环开始前,并不知道重复执行循环语句序列的次数。while语句按不同条件执行循环语句序列零次或多次。
while语句的格式:
while(条件表达式){
循环语句序列;
}
说明:
1)while循环语句的执行过程如下。
- 计算条件表达式
- 如果条件表达式结果为true,控制将转到循环体语句序列(进入循环体)。当到达循环体语句序列的结束点时转计算条件表达式,即控制转到while语句的开始,继续循环。
- 如果条件表达式结果为false,退出while循环,即控制转到while循环语句的后继语句。
while循环的执行流程图如图:
2)条件表达式是每次进入循环之前进行判断的条件,可以为关系表达式或逻辑表达式,其运算结果为true(真)或false(假)。条件表达式中必须包含控制循环的变量。
3)循环语句序列可以是一条语句,也可以是多条语句。当语句序列中仅含有一条语句是,花括号可以省略。
4)循环语句序列中至少应包含改变循环条件的语句,以使循环趋于结束,避免“死循环”。
代码示例如下:
public static void main(String[] args) {
int i=1,sum=0;
while(sum<=3000){
sum+=i;
i++;
}
System.out.println("求1+2+3+4+……的和,直至和大于3000为止,结果为"+sum);
}
(3)do while循环
do语句按不同类型执行一次或多次循环语句序列。do while循环式while循环的后测试版本。该循环的测试条件在执行完循环体之后执行。而while循环的的测试条件在执行循环体之前执行。因此,do while循环的循环体至少执行一次,而while循环的循环体可能一次也不执行。
do while循环语句的格式如下:
do{
循环体语句序列;
}while(条件表达式);
do while循环语句的执行流程如下:
当执行到do语句时,立即进入循环体执行循环体语句序列,然后测试条件表达式。如果条件表达式的结果为true,则返回do语句继续执行;否则退出循环,执行while语句的后继语句。do while循环的执行流程如下图:
代码示例如下:
public static void main(String[] args) {
int i=1,sum=0;
do{
sum+=i;
i++;
} while(sum<=3000);
System.out.println("求1+2+3+4+……的和,直至和大于3000为止,结果为"+sum);
}
4、跳转语句
(1)break语句
不带标签的break语句,在多分支选择结构中的作用时跳出循环,执行后继语句。可以用于退出for、for each、while和do while循环。
带标签的break语句用于跳出有标签标记的语句/语句块。
(2)continue语句
不带标签的continue语句,也可以用于退出for、for each、while和do while循环。但它是结束本次循环,然后根据循环条件判断是否执行下一次循环。带标签的continue语句和带标签的break语句相类似,用于结束本次循环,并跳转到由标签标记的外层循环。
(3)return语句
return语句用于终止方法的执行并将控制返回给调用方法。如果有返回类型,return语句必须返回这个类型的值。如果方法为void型,应使用没有表达式的return语句;如果方法为void类型,方法体最后的return语句可以省略。
5、程序的调试
(1)打断点:在代码行左边栏点击鼠标左键,出现红色圆圈。然后点击右上的甲壳虫。
(2)让它一步一步执行:点击向下的蓝色箭头。如下图中的:
(3)结束时点击右上角的停止按钮,再次点击红色圆圈,结束调试。