在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。
也就是说程序的流程对运行结果有直接的影响。
所以,我们必须清楚每条语句的执行流程。
而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
顺序结构
程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行。、
选择结构(分支结构)
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
if语句:if条件句有三种形式
1:if(表达式){方法体}
2:if(表达式){方法体} else {方法体}
3:if(表达式){方法体} else if(表达式){方法体} else{方法体}
注意:
关系表达式无论简单还是复杂,结果必须是boolean类型
if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
switch语句:
表达式的取值:byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是String
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
注意事项:
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
default可以省略吗?
可以省略。一般不建议。除非判断的值是固定的。
break可以省略吗?
可以省略,一般不建议。否则结果可能不是你想要的,会有贯穿现象
default的位置一定要在最后吗?
可以出现在switch语句任意位置。
switch语句的结束条件
遇到break
执行到程序的末尾
if语句使用场景:
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断
switch语句使用场景:
针对几个常量值的判断
循环结构
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
包括while循环语句,do…while循环语句和for循环
注意事项:
for循环语句和while循环语句可以等价转换,但还是有些小区别的
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了;
而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。
原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
do…while循环至少会执行一次循环体。
for循环和while循环只有在条件成立的时候才会去执行循环体
总结:写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环
接下来看看循环语句的中断与跳转:
break
continue
return
System.exit(0)
例子:
总结:
break:(针对最近的循环结构)
(1).结束当前整个循环,执行当前循环下边的语句。忽略循环体中任何其它语句和循环条件测试。
(2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。[逐层判断,逐步跳出]
(3).break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。
(4).当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。
总的来说:就近原则,结束当前的整个循环。
continue:(针对本次循环)
(1).终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。
(2).结束当前循环,进行下一次的循环判断。
(3).终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行。
总的来说:终止当前这次循环,进行下一次循环。
return:(针对循环结构所在方法)
总的来说:退出循环所在方法。
System.exit(0):(针对整个应用程序)
总的来说:正常退出应用程序。