4.1) OCJP/1Z0-851 / 2012-08-28

OCJP (1Z0-851 / 2012-08-28 / Exam B) - 44 번

kkikkodev 2015. 9. 6. 01:54



관련 이론 및 문법

(try ~ catch ~ finally 참고)

http://kkikkodev.tistory.com/106


문제 의도

주어진 소스코드에 대한 설명 중 참인 것을 고르는 문제입니다.


답안

D


풀이 방법

소스코드를 살펴보면, 1 번 라인에 Exception 클래스를 상속하는 TestException 클래스가 정의되어 있습니다. 2 번 라인에는 A 클래스가 있고, 3 번 라인에 sayHello 라는 메소드가 있는데, 이 메소드에서는 TestException 을 throws 하고 있습니다. 메소드 내부의 4 번 라인에서는 name 이 null 이면 실제로 TestException 을 발생시키고 있습니다. 또한 8 라인에는 TestA 라는 클래스가 정의되어 있고, 그 안의 9 라인에 main 메소드가 있습니다.


10 번 라인에서 new A().sayHello("Aiko"); 문을 통해서 sayHello 메소드를 호출하려고 하고 있습니다. 3 번 라인의 sayHello 의 정의부를 살펴보면, throws TestException 이 있는 것을 확인할 수 있습니다. 따라서, 이를 호출하고 있는 10 라인에서, 이 TestException 을 try ~ catch 로 묶어주거나, 혹은 9 라인의 main 메소드에서도 throws TestException 을 해서 예외를 회피하여야 합니다. 이 두 가지 중 하나도 안 되어 있으므로, 컴파일 에러가 나게 됩니다.


보기 A 를 보면, 컴파일이 성공한다고 했는데, 컴파일 에러가 발생하므로 답안 후보에서 제외합니다.


보기 B 를 보면, 클래스 A 는 컴파일이 안된다고 했는데, 컴파일이 안되는 것은 TestA 이기 때문에 답안 후보에서 제외합니다.


보기 C 를 보면, 9 라인에 정의된 메소드에서 TestException 을 회피하도록 수정될 수 없다고 했는데, main 메소드 또한 throws TestException 문장을 추가하여, sayHello 메소드처럼 동일하게 예외 처리를 회피할 수 있기 때문에, 답안 후보에서 제외합니다.


보기 D 를 보면, 만약 10 라인이, try 와 TestException 을 처리할 수 있는 catch 구문으로 둘러쌓였으면, TestA 는 컴파일된다고 했는데, sayHello 메소드가 예외 처리를 회피하므로, 이를 호출한 main 메소드에서 대신 예외처리를 하거나 (try / catch) 똑같이, 예외 처리를 회피하여야 하기 때문에 (throws TestException) 이는 답안 후보가 됩니다.


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