Reputation: 1944
Why doens't the following code throw a 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);
}
}
notice that 'E' and 'e' isn't equal and it is in the switch.. The same for 'p'. It does compile and run en prints: length of array: 8 count= 2
I completed my OCA certificate today and got the above question. But I can't figure out why it doesn't throw a runtime when 'e' or 'p' is checked.. This means there is an empty "default" in every switch or something?
Upvotes: 1
Views: 116
Reputation: 115388
Why do you expect any exception here? If value of c
is not mentioned in any case
statement nothing happens on current iteration of your loop, switch
passes through and loop is going to the next iteration.
Upvotes: 1
Reputation: 1503310
This means there is an empty "default" in every switch or something?
Sort of. If no case
matches the specified value, and there's no default
case, nothing happens - it's as simple as that.
From section 14.11 of the JLS:
If no
case
matches and there is nodefault
label, then no further action is taken and the switchstatement
completes normally.
I wouldn't personally have expected an exception here - I don't think I've ever worked with a language which would throw an exception in a similar language construct, though I dare say one may exist.
Upvotes: 8