관련 이론 및 문법

(Exception 참고)

http://kkikkodev.tistory.com/173


문제 의도

주어진 소스코드를 컴파일하여 실행한 결과를 고르는 문제입니다.


답안

E


풀이 방법

소스코드를 살펴보면, 1 번 라인에 test 메소드가 정의되어 있고, Error 를 throws 하고 있습니다. 내부의 2 번 라인에서는 AssertionError 를 발생시키고 있습니다. 5 번 라인에는 main 메소드가 정의되어 있습니다.


프로그램이 실행되면, 6 번 라인이 실행되어, try 구문 안에서, test 메소드가 호출됩니다. 따라서 1 번 라인으로 제어권이 넘어가게 되고, 2 번 라인이 실행되어, AssertionError 가 강제로 발생되게 됩니다. 하지만, test 메소드 내에서 try catch 문이 없기 때문에, 이 메소드를 호출한 메소드로 AssertionError 의 처리를 넘기면서 현재 메소드를 종료합니다. (throws Error 구문은 없어도 에러가 나지 않습니다. 그 이유는 Error 는 따로, 처리를 명시하지 않아도 되기 때문입니다.)


main 메소드에서 catch 문에는 Exception 에 대한 처리 부분만 있기 때문에, (Error 와 Exception 은 다르기 때문에) main 메소드 또한 AssertionError 를 JVM 으로 처리하도록 넘기면서 자신도 종료합니다. 그리고, JVM 에서 AssertionError 를 받아서 처리를 합니다. (Error 상세 내역 출력)


결국, 소스코드에 명시되어 있는 콘솔 화면 출력 내용들은 하나도 출력되지 않고, (중간에 메소드가 종료되어 버리기 때문에) main 메소드의 6 번 라인에서 test 메소드를 호출하여 2 번 라인에서 발생한 AssertionError 에 대한 상세 내역만 JVM 이 직접 화면에 출력하게 됩니다.


따라서 답안은 E 가 됩니다.


by kkikkodev 2015. 9. 5. 20:08