切换行为 - java

Gre*_*egD 1 java switch-statement

为什么以下代码不会抛出runtimeException?

public class Test2 extends Test {


public static void main(String[] args) {
    char[] array = new char[]{'A', '\t', 'e', 'I', 'O', 'u', '\n', 'p'};

    int count = 0;
    for (char c : array) {
        switch (c) {
            case 'A':
                continue;
            case 'E':
                count++;
                break;
            case 'I':
                count++;
                continue;
            case 'o':
                break;
            case 'u':
                count++;
                continue;
        }
    }
    System.out.println("length of array: " + array.length);
    System.out.println("count= " + count);
}
Run Code Online (Sandbox Code Playgroud)

}

注意'E'和'e'不相等而且它在开关中..对'p'也一样.它确实编译并运行en print:数组的长度:8 count = 2

我今天完成了我的OCA证书并得到了上述问题.但是当我检查'e'或'p'时,我无法弄清楚它为什么不抛出运行时..这意味着每个开关中都有一个空的"默认"或什么?

Jon*_*eet 8

这意味着每个开关或其他东西都有一个空的"默认"?

有点.如果没有case匹配指定的值,并且没有任何default情况,则没有任何反应 - 就像那样简单.

JLS第14.11节:

如果没有case匹配且没有default标签,则不采取进一步操作并且交换机statement正常完成.

我本人不会在这里期待一个例外 - 我不认为我曾经使用过一种会在类似的语言结构中引发异常的语言,尽管我敢说可能存在一种.