Java 控制语法中的 for-each、跳转以及switch-case

1. forEeach-增强型 for 语句

这是 Java 5 之后引入的语法,可以使用更为简洁的 for 循环语法来操纵数组和集合,跟 python 中的 for _ in sequence 具有相同的思想。它无需我们创建 int 变量和步进来控制循环计数。请看如下比较,两段代码都会打印出相同的结果。

char[] cArr = "I love China!".toCharArray();
for(int i=0; i < cArr.length; i++)
    System.out.print(cArr[i] + " ");
// I   l o v e   C h i n a !
for(char c: "I love China!".toCharArray())
    System.out.print(c + " ");
// I   l o v e   C h i n a !

注意:Java 中的 for-each 只能用于迭代数组实现了 Iterable 接口的类对象

2. 跳转机制:标签

标签只在循环语句之前使用,需要紧靠在循环语句的前方,中间不应该插入任何其他语句。这样做的目的只有一个,那就是让 break 或者 continue 关键字可以从多重循环结构的内层循环直接跳转到标签所在的外层循环,因为 break/continue 一般只能中断当前循环。

tag: for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 10; j++) {
        if (j > 5) {
            System.out.println();
            continue tag; // 跳转到外层循环继续执行
        }
        System.out.print(i);
        System.out.print(j);
        System.out.print(" ");
    }
}
/*
output:
00 01 02 03 04 05 
10 11 12 13 14 15 
20 21 22 23 24 25 
30 31 32 33 34 35 
40 41 42 43 44 45
*/

3. 分支语句:switch

switch 可以更方便地实现多路选择。它要求使用一个选择因子,并且必须是整型数值(int/short/char/byte)而不能是浮点型。Java 7 以上版本中支持 String 型。

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

这里要提到一种数据类型 enum,它从 Java 5 开始被引入的特性,很大地方便了对枚举的需求。enum 和 switch 是很相配的,它扩展了 switch 的选择因子所支持的数据类型。

enum Categories {
    Artist, Celebrities, Movies, Nature, Anime
}
class Wallpaper {
    Categories category;

    Wallpaper(Categories category) {
        this.category = category;
    }

    void describe() {
        switch(category) {
            case Celebrities:
                System.out.println("Stars or famous people in entertainment world.");
                break;
            case Artist:
            case Movies:
            case Anime:
                System.out.println("Related to artificial visual works.");
                break;
            case Nature:
                System.out.println("Captures of natural world.");
                break;
            default:
                System.out.println("Others");
        }
    }

    public static void main(String[] args) {
        Wallpaper staryNight = new Wallpaper(Categories.Artist);
        Wallpaper thebestcriss = new Wallpaper(Categories.Celebrities);
        staryNight.describe();
        thebestcriss.describe()
    }
}
posted @ 2021-05-09 23:58  alterwl  阅读(169)  评论(0编辑  收藏  举报