Java流程控制

流程控制思维导图流程控制思维导图

 

一、顺序结构

如果没有流程控制(即没有分支结构和循环结构),Java方法里面的语句是一个顺序执行流,从上到下依次执行每条语句。

二、分支结构

1.if语句

if语句使用布尔表达式或者布尔值作为分支条件来进行分支控制。有如下三种形式:

(1)第一种形式

if(布尔表达式或者布尔值){
    语句...
}

(2)第二种形式

if(布尔表达式或者布尔值){
    语句...
}else{
    语句...
}

(3)第三种形式

if(布尔表达式或者布尔值){
    语句...
}
else if(布尔表达式或者布尔值){
    语句...
}
...//可以有零个或者多个else if语句
else//最后的else语句也可以省略
{
    语句...
}

注意:

  • if之后括号里的表达式的返回值只能是true或者false,不能是1或者0。
  • 当使用if...else语句进行流程控制时,一定不要忽略else的隐含条件,else的隐含条件是对前面的条件取反。
  • 使用if...else语句时,一定要先处理包含范围更小的情况。
    //下面是一个容易出现的逻辑错误
    public class demo{
        public static void main(String[] args){
            int age  = 45;
            if(age > 20){
                System.out.println("青年人");
            }else if(age > 40){
                System.out.println("中年人");
            }else if(age > 60){
                System.out.println("老年人");
            }
            //程序永远不会输出中年人和老年人
        }
    }
    如例子中的age>60和age>20两个条件,明显age>60的范围更小,所以应该优先处理age>60的情况。
  • if、esle、else if后的条件执行体要么是一个花括号括起来的代码块,要么是以分号为结束符的一行语句,甚至可能是一个空语句。如果省略了if条件后条件执行体的花括号,那么if条件只控制到紧跟该条件语句的第一个分号处。

下面给出一个省略花括号导致编译出错的例子:

int c = 5;
if(c > 4)
    c--;
    //下面是一行普通代码,不属于执行体
    System.out.println("c大于4");
//此处的else将没有if语句,因此编译出错
esle
    System.out.println("c不大于4");

2.switch语句

(1)switch的语法格式如下:

switch (expression){
//可以省略case后代码块的花括号
    case condition1:
    {
        statement(s)
        break;
    }
    case condition2:
    {
        statement(s)
        break;
    }
    ...
    case conditionN:
    {
        statement(s)
        break;
    }
    default:
    {
        statement(s)
    }
}

注意:

  • switch语句后面的控制表达式的数据类型只能是byte、short、char、int四种整数类型、枚举类型和java.lang.String类型(Java7才允许),不能是StringBuffer或者StringBuilder这两种字符串类型,也不能是boolean类型
  • switch语句会先求出expression表达式的值,然后拿这个表达式和case标签后的值进行比较,一旦遇到相等的值,程序就开始执行这个case标签后的代码,不再判断与后面case、default标签的条件是否匹配,除非遇到break才会结束,所以注意不要忽略case后代码块的break。

三、循环结构

一般循环语句可能包含4个部分:初始化语句(init_statement)、循环条件(test_expression)、循环体(body_statement)、迭代语句(iteration_statement)[循环体如果只有一行语句,可以省略花括号]

三种循环结构之间可以相互嵌套。

1.while循环语句

语法格式如下:

[init_statement]
while(test_expression){
    statement;
    [iteration_statement]
}

 

 注意:如果省略了循环体的花括号,那么while循环条件只控制到紧跟该循环条件语句的第一个分号处。

2.do while 循环语句

语法格式如下:

[init_statement]
do{
    //与while不同的是,while循环的循环体可能得不到执行,但do while的循环体至少执行一次
    statement;
    [iteration_statement]
}while(test_expression);//这里一定要有分号,表明循环结束

3.for循环

基本语法格式如下:

for( [init_statement] ; [test_expression] ; [iteration_statement] ){
    statement;
}
//如果循环体只有一行语句,那么循环体的花括号可以省略

程序执行for循环时,最先执行初始化语句init_statement(初始化语句只在循环开始前执行一次),然后判断循环条件test_expression,如果得到true,则执行循环体(每次执行循环体之前都会先进行循环条件判断),循环体执行结束后执行迭代语句。

注意:

  • for循环如果需要在初始化表达式中声明多个变量,那么这些变量应该具有相同的数据类型
  • for循环圆括号中只有两个分号是必需的,初始化语句、循环条件、迭代语句部分都是可以省略的。如果省略了循环条件,则这个循环条件默认为true。
  • 建议不要在循环体内修改循环变量(也叫循环计数器)的值,否则会增加程序出错的可能性。万一程序真的需要访问,修改循环变量的值,建议重新定义一个临时变量,先将循环变量的值赋给临时变量,然后对临时变量的值进行修改。
  • 把for循环的初始化语句放在循环之前定义有一个作用:可以扩大初始化语句中所定义变量的作用域

4.foreach循环

在Java数组里面再详细讲述其用法。

5.控制循环结构

break:用于完全结束break语句所在循环,跳出当前循环体。

break还可以用于直接结束其外层循环,此时需要借助标签。Java的标签就是一个紧跟着英文冒号(:)的标识符。与其他语言不同的是,Java中的标签只有放在循环语句之前才有作用。例如下面代码:

public class Demo1 {
	public static void main(String[] args) {
		//外层循环,outer作为标识符
		outer:
			for(int i = 0;i < 5;i++) {
				//内层循环
				for(int j = 0;j < 3;j++) {
					System.out.println("i="+i+"  j="+j);
					if(j == 1) {
						//跳出outer标签所标识的循环
						break outer;
					}
				}
			}
	}

}

第11行的break outer;语句将会导致结束outer标签指定的循环,而不是break所在的循环。注意:break后的标签必须是一个有效的标签,即应该把标签放在break语句所在循环的外层循环之前定义。当然,也可以把标签放在break语句所在循环之前定义,只是这样就失去了标签的意义,因为break默认就是结束其所在的循环。

continue:用于忽略本次循环剩下的语句,接着开始下一次的循环,并不会终止循环。

与break类似,continue后也可以紧跟一个标签,用于直接跳过标签所标识循环的当次循环的剩下语句,重新开始下一次循环。这个标签通常应该放在continue所在循环的外层循环之前定义。

return:直接结束整个方法,从而结束循环。

 

 

 

至此,以上是本人在看书籍《疯狂Java讲义》时做的知识归纳总结,不到之处望海涵与指正。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值