2014-05-06 4 views
-1

Я готовлю пример OCA Java SE 7. Вопрос о распределительном высказывании: вот код:Оператор switch Java SE 7, когда будет выполняться случай по умолчанию?

int a = 5; 
switch(a){ 
    default: //print 0 
    case 1: //print 1 
    case 5: //print 5 
    case 8: //print 8 
} 

что выход коды? Вот что я не понимаю: По умолчанию обычно будет последнее условие. Что, если по умолчанию первое условие? будет ли первый случай совпадать по умолчанию?

еще один шаг: Если я изменю код, сделайте i = 10, что, безусловно, не будет соответствовать остальному состоянию 3, но будет соответствовать условию по умолчанию. Учитывая, что нет перерыва; в моем коде выйдет программа: 0 1 5 8 ??

обновление Я не думаю, что я утверждаю, мой вопрос ясный ... Как было предложено, я попробовал его с кодом, и я понимаю, правила о падении через.

И если я = 10, то результат будет: 0 1 5 8.

, что меня смутило, что: если я = 10

и когда мы вступаем переключатель заявление, в котором линия выполнена первый?

по умолчанию: // печать 0

или

случай 1: // печать 1

обновление обновление спасибо, ребята ... Я думаю, что я понимаю ...

случай по умолчанию будет срабатывать только тогда, когда совпадений нет.

Что означает в этом случае последовательность выполнения должна быть:

case 1: 
case 5: 
case 8: 
//and no found yet..trigger the default case 
// given that my default case is at the top and no break; 
//it fall through and print: 0 1 5 8 

FYI: Я знаю, как запустить код. И я не ожидал такого огромного количества критических замечаний, говорящих, что «сделай это сам», «не просто читать и не практиковать».

в любом случае, спасибо.

+7

не является его довольно легко попробовать это и посмотреть на себя? Предполагая, что вы меняете '// print' на' System.out.println() '; –

+0

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html # d5e16570 говорит, что разрыв не приведет к провалу. Ознакомьтесь с остальной частью раздела, чтобы просмотреть информацию о 'default' в операциях' switch'. –

+1

просто продолжайте проверять его, он не сломает ваш компьютер. btw никакой оператор break в любом случае не выполнит все случаи. – Setu

ответ

4

Вы должны попробовать и посмотреть. Но я хочу отметить, что нет break заявлений. Это означает, что он провалится, откуда он заканчивается.

Итак, что произойдет, это будет оценивать коммутатор и перейти к соответствующему случаю. Оттуда он провалится.

1

переключатель - это всего лишь конкретный шаблон для перехода, который считается безопасным для общего использования.

Дает что-то вроде этого:

if (i == 1) goto lbl1; 
if (i == 5) goto lbl2; 
if (i == 8) goto lbl3; 
lbl4: print 0; 
Lbl1: print 1; 
Lbl2: print 5; 
Lbl3: print 8; 
Смежные вопросы