2016-06-08 2 views
0

자바에서 예외를 배우는 중이므로 예제를 살펴 보았습니다.하지만 잘못되었거나 여전히 이해할 수 없습니다.이 예외 예가 잘못 됐습니까?

여기에 코드입니다 :

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

그리고 다른 시나리오에서 실행 명령을하는 아래로 쓰여 있지만, MyException가 Command4 등 발생했을 경우 거의 하나 개의 시나리오에서, command7 실행되지 않습니다.

잘못 됐습니까? 나는 여기서 배울 기회가 있기 때문에 배웠다.하지만 교사의 메모가 틀릴 수도있다. 명령 6이 명령 7에 뒤따른 경우에만 참이되지 않을까? 그래서 command6과 command7은 하나의 catch 블록에 있어야만 command7이 실행되지 않는 이유를 설명 할 수 있습니다 (이 경우에는 command5 중에 MyException이 발생하더라도 모든 시나리오가 노트에서 실행되지는 않습니다) . command2;, command3; 또는 잠재적으로는 IOException 또는 OwnException의 원인이 command6;하지 않는


+4

네가 옳고 선생님이 틀렸어. 그러나 이것을 해결하는 가장 좋은 방법은 직접 실행하는 것입니다. 그것은 SO 질문을 작성하는 것보다 빠르다. :) – sstan

+0

@sstan이 ide (또는 ideone.com)을 사용하고 그걸 가지고 노는 것처럼, 당신은 자신의 눈으로 볼 수있다;) –

+2

"그러나 command7은 command4 중에 MyException이 발생하면 거의 한 번만 실행됩니다. " 그것은 전적으로 사실이 아닙니다. command4 및 command5 중에 예외가 발생하지 않으면 command 7도 실행됩니다. command6이 목적을 가지면 catch 블록 내에서 command7이 아닙니다. – Jimmy

답변

2

command7; 모든 시간을 실행해야합니다. 명백히 프로그램이 엉성한 것으로부터 충돌을 일으키지 만 그 주위에 방법이 있으면 안된다는 것 이외에 command7;은 실행되지 않을 것입니다. command11;이 실행되고 command8; 또는 command9;이 실행되지 않은 경우 command7;이 실행되어야합니다. 앞서 말한대로 대괄호를 옮긴 경우 command5;MyException에서 6과 7을 실행합니다.

관련 문제