在一个程序运行的过程中,各个语句的执行顺序对程序的执行结果是有直接影响的。所以我们必须清楚每条语句的执行流程。而且,很多时候我们需要控制语句执行的顺序来实现我们要完成的功能。
4.1 分类
- 顺序结构
- 分支结构(if,switch)
- 循环结构(for,while,do…while)
4.2 顺序结构
public static void main(String[] args) {
//顺序执行,根据编写的顺序,从上到下执行
byte b = 100;
System.out.println(b);
short s = 1000;
System.out.println(s);
int i = 123456;
System.out.println(i);
}
4.3 分支结构(if语句)
if语句有三种结构
第一种格式:if
if(关系表达式){
执行语句体;
}
//其他语句
执行流程:
1.首先计算关系表达式的值;
2.如果值为true就执行语句体;
3.如果值为false就不执行语句体;
4.继续执行后面的其他语句。
public static void main(String[] args) {
//定义两个变量
int a=10;
int b=5;
//变量使用if判断
if(a<b){
//关系表达式的值为false,所以这个语句体不会被执行
System.out.println("a<b");
}
//继续执行下面的语句
b=10;
if(a==b){
//关系表达式值为true,所以这个语句体会被执行
System.out.println("a==b");
}
//继续执行下面的其他语句
System.out.println("over");
}
第二种格式:if…else
if(关系表达式){
语句体1;
}else{
语句体2;
}
//其他语句
执行流程:
1.首先计算关系表达式的值;
2.如果值为true就执行语句体1中的内容;
3.如果值为false就执行语句体2中的内容;
4.继续执行其他语句。
public static void main(String[] args) {
//定义两个变量
int a=10;
int b=5;
if(a==b){
//关系表达式的值为false,所以这个语句体不会被执行
System.out.println("a等于b");
}else{
//该语句体会被执行
System.out.println("a不等于b");
}
//继续执行下面的其他语句
System.out.println("over");
}
第三种格式:if…else if…else
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
...
}else if(关系表达式n){
语句体n;
}else{
语句体n+1;
}
//其他语句
执行流程:
1.首先计算关系表达式1,判断其结果是true还是false;
2.如果true就执行语句体1;
3.如果为false就计算关系表达式2,判断结果;
4.如果为true就执行语句体2;
5.如果是false就继续计算关系表达式…,判断结果
6…
7.如果没有关系表示式为true,则执行else里面的语句体n+1。
public static void main(String[] args) {
//定义一个变量
int week = 6;
if(week==1){
System.out.println("今天是星期一");
}else if(week==2){
System.out.println("今天是星期二");
}else if(week==3){
System.out.println("今天是星期三");
}else if(week==4){
System.out.println("今天是星期四");
}else if(week==5){
System.out.println("今天是星期五");
}else if(week==6){
System.out.println("今天是星期六");
}else if(week==7){
System.out.println("今天是星期日");
}else{
System.out.println("数字有误!");
}
//继续执行下面的其他语句
System.out.println("over");
}
4.4 循环结构
概述:循环语句可以在满足循环条件的情况下,反复执行一段代码,这段被重复执行的代码称为循环体语句,当反复执行这个循环体的时候,需要在合适的时候将循环判断条件改为false,从而结束循环,否则循环将一直执行下去,从而形成死循环。
for循环语句
格式:
for(初始化表达式1;布尔表达式2;步进表达式3){
循环体4;
}
格式解释:
- 初始化表达式:用于表示循环开启时的起始状态。
- 布尔表达式:用于表示循环反复执行的条件。
- 步进表达式:用于改变循环的状态。
- 循环体:用于表示反复执行的内容。
执行流程:
- 1234->234->234->…知道2不满足为止。
public static void main(String[] args) {
//控制台输出10次HelloWorld,不使用循环
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("--------------------");
//用循环结构改进,循环10次
//定义变量i从0开始,循环条件为i<10
for (int i = 0; i < 10; i++) {
System.out.println("HelloWorld"+i);
}
}
小练习:计算1-100之间的偶数和,并把结果在控制台输出。
public static void main(String[] args) {
//定义一个变量sum,用于存储结果。
int sum = 0;
for(int i=1;i<=100;i++){
//判断i是不是偶数,用一个if条件语句
if(i%2 == 0){
sum+=i;
}
}
//循环执行完毕,打印结果
System.out.println("1-100之间的偶数和为"+sum);
}
4.5 死循环
-
死循环:就是循环中的条件永远为true,死循环就是永不结束的循环,例如while(true){}。在我们开发中,会出现使用死循环的场景,比如,我们需要读取用户的输入,但是用户将要输入多少数据我们并不清楚,这时候就需要用到死循环,当用户输入数据完毕了,那么就可以结束循环了,这时候结束循环就需要用到跳出语句了。
死循环(无限循环)的格式: -
for( ; ; ){}
-
while(true){}
-
do{} while(true);
4.6 嵌套循环
- 嵌套循环:就是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,总共的循环次数=外循环次数*内循环次数。
- 实例:使用嵌套循环,打印2018-2021年的月份,格式为xxxx年x月
public static void main(String[] args) {
//使用嵌套循环,年份是外循环,月份是内循环
for(int i=2018;i<=2021;i++){
for(int j=1;j<=12;j++){
System.out.print(i+"年"+j+"月 ");
}
//每打印完一年就换行
System.out.println();
}
}
打印结果:
4.7 Debug调试
- Debug调试:是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
- 使用IDEA的断点调试功能,查看程序运行过程。
A表示正在运行的方法以及断点所在的行数;
1表示代码向下执行一行,快捷键F8;
2表示进入被调用的方法,快捷键F7;
3表示运行完所有程序,快捷键F9;
4表示停止Debug调试模式,快捷键Ctrl+F2;
5表示切换到控制台查看运行结果;
6变量值显示区域。 - Debug操作流程
(1)如何加断点?
选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可。
(2)如何运行加了断点的程序?
在代码区域右键选择Debug执行,或者点击运行按钮旁边的小虫子。
(3)看哪里?
看Debugger窗口和Console窗口
(4)点哪里?
点Step Into这个箭头,也可以直接F7
(5)如何删除断点
直接在断点上再次鼠标左键点击一下即可。