方法控制流程
1. 流程语句分为两种,一种称为简单语句,以 ; 结尾,或者是语句块,以{}包裹,不加 ; ,可以将语句块看作是简单语句的集合。
2. 控制语句结构分为三种,分别是顺序结构,选择结构和循环结构。顺序结构就是代码从上到下依次执行,选择结构就是根据条件的判断选择相应流程语句,循环结构是根据循环体重复执行流程语句。
顺序结构是最简单的控制语句,执行流程语句分先后顺序(这个先后顺序不是系统指定的,而是开发者书写的代码顺序),由此带来的问题是:1. 在代码块中,局部变量总会在被使用前先声明,否则异常,2. 只在顺序结构中出现的return后不可以再写代码,否则编译报错。
选择结构
选择结构有只有两种,分别是if-else语句块和switch语句块。
1. if-else语句块
if-else语句块是以逻辑的true和false作为选择的条件,其中if后将加括号写明判断语句,然后if的语句块将执行true的结果,else后不跟判断语句,直接加false的执行语句块。一个if-else语句块的两块代码一定是不兼容的(你执行了我就不执行),并且if-else语句块必须包含所有可能的结果的执行(要么true,要么false)
if语句是单块语句,用来执行条件为true时的情况,后面不加else语句,如果判断为false,那么代码将跳过这个if语句块接着向下执行。
if-else if-else语句是多代码块语句,多来执行多个判断条件的语句。
2. switch语句
switch语句的基本结构是:
switch-expressin部分必须是整形和字符型(不是字符串),每个case提供了选择语句块的入口,而没有提供出口,所以为了切断后续的执行,需要使用break退出当前的选择(break的作用只是退出这个switch结构体,同理的,使用return也是可行的)。如果没有break,switch就是一个彻头彻尾的顺序结构语句块了,它会一直向下执行,直到执行到语句块尾。
default的存在是为了避免传入的switch-expression不在所有case语句中的情况,default充当了意外情况的选择语句入口(没有提供出口),当然,default语句是可以省略的,此时如果传入非case情况的值,整个switch语句将会被跳过。
循环结构
循环结构由四个部分组成,分别是:初始条件,循环语句,迭代体,检查条件。但是这个部分都不是必须的,就是说,即使缺少这四个部分的几个或所有,依然可以构成循环体,只不过这种循环体看起来会很奇怪。
缺少检查条件的循环体,检查条件默认返回的是true。
迭代体和检查条件密切相关,迭代体的作用是使检查条件为true,从而跳出循环,缺少迭代体,很可能造成无限循环。
没有初始条件的循环体,比如while循环体。
没有循环语句的循环体,将是空循环体。
循环结构主要有以下几种:1. for循环,2. 增强for循环,3. while循环,4. do-while循环。
for循环 for循环是java中唯一可以在语句条件中定义变量的语法结构,for循环的括号内包含了初始条件,检查条件和迭代体。for的循环条件中,只有检查条件是必须的,迭代体可以写在循环体内,初始条件可以写在for语句块之前。
增强for循环 增强for循环的实质是iterator实现的便利机制,因此增强for循环只适用于对象数组或者以对象数组为底层实现的集合类的遍历。具体问题会在Java集合类框架中讨论。
while循环 while循环执行的是”当...为true“的循环,没有初始条件,检查条件是while后括号里的部分,循环语句和迭代体写在一起。
do-while循环 do-while循环本质上和while循环是一样的,不同之处是,循环语句至少会执行一次,然后在依据检查条件判断循环语句是否需要接着执行。
- break continue
break的作用有两点,在switch语句中用以跳出当前循环,在for和while语句中跳出循环。这里的循环指的是整个循环,break被写在那个循环语句中,就会跳出这个循环语句所在的村换体,而不是某个循环的顺序语句块。
continue和break有些不同,continue会跳出当前的循环语句,并非当前的循环体,并且continue只能在循环体结构中使用。
实际上,break; 和contine; 都是跳出当前的循环(循环体或循环语句)它们实质上是break thisLabel; 和continue thisLabel的缩写,如果为一个循环体指定名称,并在break和continue后加上此名称,break和continue的作用范围就不止是当前的循环体,还可以作用于包裹当前循环体的外部循环体,比如: