본문 바로가기

Study/자바의정석.연습문제풀기

자바의정석_연습문제_19.12.13.FRI

08.예외처리_ExceptionHandling

 

[ 8-1 ]

Q. 예외처리의 정의와 목적에 대해서 설명하시오

Sol) 정의 - 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것

      목적 - 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

 

*// 프로그램의 실행도중에 발생하는 에러는 어쩔 수 없으나, 예외는 프로그래머가 이에 대한 처리를 미리 해주어야 한다.

에러(error) - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

예외(exception) - 프로그램 코드에 의해서 수습될 수 잇는 다소 미약한 오류

 

 

[ 8-2 ]

 

내답: d (딩동댕!)

해답풀이) 예외의 종류는 ArithmeticException이고 0으로 나눠서 발생하였다.

예외가 발생한 곳은 method2 이고 ExceptionEx18.java의 12번째 줄이다.

main -> method1 -> method2의 순으로 호출되었음을 알 수 있다.

 

 

 

[ 8-3 ]

 

내답: d, e (딩동댕!)

해답풀이) 오버라이딩(overriding)을 할 때, 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

Exception은 모든 예외의 최고 조상이므로 가장 많은 개수의 예외를 던진 것과 같다.

 

 

[ 8-4 ]

 

내답: c, f (땡) // 답은 = c

오답풀이) try블럭 내에서 예외가 발생하면 catch블럭 중에서 예외를 처리할 수 있는 것을 차례대로 찾아 내려간다. 발생한 예외의 종류와 일치하는 catch블럭이 있으면 그 블럭의 문장들을 수행하고 try-catch문을 빠져나간다. 일치하는 catchㅂ블럭이 없으면 예외는 처리되지 않는다.

발생한 예외의 종류와 일치하는 catch블럭을 찾을 때, instanceof로 검사를 하기 때문에 모든 예외의 최고조상인 Exception이 선언된 catch블럭은 모든 예외를 다 처리할 수 있다. 한 가지 주의할 점은 Exception을 처리하는 catch블럭은 모든 catch블럭 중 제일 마지막에 있어야 한다는 점이다. 만약 그렇지 않으면 컴파일 에러가 발생한다.

 

[ 8 - 5 ]

 

해답: 1 3 5 1 2 5 6

해답풀이) 예외 발생시, 1,3,5 출력/ 발생하지 않으면 1,2,5,6 출력

ArithmeticException은 RuntimeException의 자손이므로 RuntimeException이 정의된 catch블럭에서 처리된다. 이 catch블럭에서 return문이 있으므로 메서드를 종료하고 빠져나가게 되는데, 이때도 finally블럭이 수행된다.

*// finally 구문: 예외발생여부에 관계없이 항상 실행되는 문장