2016-06-08 3 views
0

Так что я просто изучаю исключения на Java, я смотрю пример, но это либо неправильно, либо я все еще не понимаю.Не является ли этот пример исключения неправильным?

Вот код:

command1; 
try { 
    command2; 
    command3; 
    try { 
     command4; 
     command5; 
    } catch (MyException e) { command6; } 
    command7; 
} catch (IOException e) { 
    command8; 
} catch (OwnException e) { 
    command9; 
} finally { 
    command10; 
} 
command11; 

И тогда это записано, какие команды будут работать в различных сценариях, но command7 почти никогда не работать, только в одном случае, если MyException происходит во время command4.

Не так ли? Я просто изучаю, что есть шанс, что я здесь не прав, но есть шанс, что заметки учителя ошибочны, разве это не было бы правдой, если бы после команды6 после command7? Поэтому command6 и command7 должны быть в одном блоке catch, чтобы объяснить, почему command7 никогда не выполняется, только в этом случае (и я предполагаю, что он также будет выполняться, если MyException возникло во время команды5, но не каждый сценарий разыгрывается в примечаниях) ,


+4

вы правы, и ваш учитель ошибается. Но лучший способ решить это - запустить его самостоятельно. Это было бы быстрее, чем написать SO-вопрос :) – sstan

+0

как @sstan сказал, используйте ide (или ideone.com) и играйте с этим, вы можете увидеть его собственными глазами;) –

+2

", но command7 is почти никогда не запускается, только в одном сценарии, если MyException возникает во время команды4 ". Это не совсем верно. Команда 7 также запускается, если не встречаются исключения в команде command4 и command5. не являясь командой7 в блоке catch после того, как команда6 имеет цель. – Jimmy

ответ

2

command7; должен работать каждый раз, если command2;, command3; или потенциально не command6; вызвать IOException или OwnException. Очевидно, что command7; не будет работать, если программа выйдет из любой неподготовленной, но не такой, чтобы ее не было. Если command11; работает, и ни command8;, ни command9; не побежали, то command7; должен был бежать. Если вы переместили скобку, как вы заявили, то command5; может также вызвать MyException, который будет работать 6 и 7.

Смежные вопросы