《Thinking in Java》读书笔记4

第四章 控制执行流程

目录

第四章 控制执行流程

4.1 true和false

4.2 if-else

4.3 迭代

4.3.1 do-while

4.3.2 for

4.3.3 逗号操作符

4.4 Foreach语法

4.5 return

4.6 break和continue

4.7 臭名昭著的goto

4.8 switch


4.1 true和false

Java不允许将一个数字作为布尔值使用

4.2 if-else

else是可选的

if(Boolean-expression) 
    statement

if(Boolean-expression) 
    statement
else
    statement

statement指用分号结尾的简单语句或复合语句(封闭在花括号里的一组简单语句)

else if:else后面紧跟另一个新的if语句

4.3 迭代

while do-while for用来控制循环,有时将它们划分为迭代语句

while(Boolean-expression)
    statement

4.3.1 do-while

do
    statement
while(Boolean-Expression);

至少执行一次

4.3.2 for

for(initialization; Boolean-expression; step) 
    statement

初始化表达式、布尔表达式、步进运算都可以为空

for循环常用于执行“计数”任务

4.3.3 逗号操作符

Java里唯一用到逗号操作符的地方就是for循环的控制表达式

在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,这些语句均会独立执行

通过使用逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型

public class CommaOperator{
    public static void main(String[] args) {
        for(int i = 1, j = i + 10; i < 5 ; i++, j = i * 2) {
            System.out.println("i = " + i + " j = " + j);
        }
    }
}
/* Output:
 * i = 1 j = 11
 * i = 2 j = 4
 * i = 3 j = 6
 * i = 4 j = 8
 */

逗号分隔符:分隔函数的不同参数

4.4 Foreach语法

Java SE5引入  用于数组和容器

不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项

import java.util.*;

public class ForEachFloat{
    public static void main(String[] args) {
        Random rand = new Random(47);
        float f[] = new float[10];
        for(int i = 0 ; i < 10 ; i++) {
            f[i] = rand.nextFloat();
        }
        for(float x : f) {
            System.out.println(x);
        }
    }
}

任何返回一个数组的方法都可以使用foreach

public class ForEachString{
    public static void main(String[] args) {
        for(ch c : "An African Swallow".toCharArray()) {
            System.out.println(c + " ");
        }
    }
}

foreach还可以用于任何Iterable对象

4.5 return

return关键字有两方面的用途:

  1. 指定一个方法返回什么值(假定它没有void返回值)
  2. 会导致当前的方法退出,并返回那个值

如果在返回void的方法中没有return语句,那么在该方法的结尾处会有一个隐式的return

4.6 break和continue

在任何迭代语句的主体部分,都可用break和continue控制循环的流程

break:强制退出循环,不执行循环中剩余的语句

continue:停止执行当前的迭代,然后返回循环起始处,开始下一次迭代

4.7 臭名昭著的goto

尽管goto是Java的一个保留字,但并未使用它

Java没有goto,但能完成一些类似于跳转的操作(break continue)

标签:后面跟有冒号的标识符

           在Java中,标签起作用的唯一的地方刚好是在迭代语句之前

           在迭代前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者开关

           break和continue关键字通常只中断当前循环,但若随标签一起使用,他们就会中断循环,直到标签所在的地方

public class LabeledFor {
	public static void main(String[] args) {
		int i = 0;
outer:	for(; true; ) {
	inner:	for(; i<10 ; i++) {
				System.out.println("i = " + i);
				if(i == 2) {
					System.out.println("continue");
					continue;
				}
				if(i == 3) {
					System.out.println("break");
					i++;
					break;
				}
				if(i == 7) {
					System.out.println("continue outer");
					i++;
					continue outer;
				}
				if(i == 8) {
					System.out.println("break outer");
					break outer;
				}
				for(int k = 0 ; k < 5 ; k++) {
					if(k == 3) {
						System.out.println("continue inner");
						continue inner;
					}
				}
			}
		}
	}
}
/* Outer:
 * i = 0
 * continue inner
 * i = 1
 * continue inner
 * i = 2
 * continue
 * i = 3
 * break
 * i = 4
 * continue inner
 * i = 5
 * continue inner
 * i = 6
 * continue inner
 * i = 7
 * continue outer
 * i = 8
 * break outer
 */

注意:break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行

           由于break跳过了递增表达式,所以在i==3的情况下直接对i执行递增运算

4.8 switch

根据整数表达式的值,switch语句可以从一系列代码中选出一段去执行

switch(integral-selector) {
    case integeral-value1: statement; break;
    case integeral-value2: statement; break;
    case integeral-value3: statement; break;
    // ...
    default: statement;
}

break是可选的。若省略break,会继续执行后面的case语句,直到遇到一个break为止

switch的选择因子必须是int或char那样的整数值

enum可以和switch协调工作

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值