예외처리
개요
- 프로그램실행중 발생하는 예외적인 문제에대한 처리는일반적으로 문제의 발생시 강제적으로 그 프로그램을 종료시킴.
- Java에서는 복구가 가능한 예외인 경우에
비정상 종료가 되지 않도록 프로그램이 예외에 대한 처리를 하도록 요구한다.
예외처리
- 에러가 발생했다는 신호를 (java 가상머신 또는 throw문에 의해서) 실행중인 프로그램에게 던진다.
- 이 신호는 에러가 발생한 지점으로부터 던져진 신호를 catch할 수 있는 try문을 찾아서 제어가 진행된다.
- try문이 발견되었으면,catch절에서 match되는 예외클래스를 찾는다
- 그 try문의 catch절 다음에 처리코드를 두어 예외(exception) 객체를 이용하여 예외처리를 한다.
try catch block
- 형식 :
try {
... //예외발생이 가능한 실행문들
} catch(예외클래스명 변수명) {
... //예외처리문들
} finally {
... //마지막에 반드시 실행되는 실행문들
}
- try문의 블럭내에는 예외발생이 가능한 문들을 넣고, catch절의 블록내에는 예외처리문을 정의.
- 다중catch블록이 가능. 첫번째 catch절부터 차례대로 해당하는 catch절을 찾게됨
- 보내온 예외클래스와 동일한 예외클래스가 catch절에 명시되어 있는지를 찾아서,
있으면 전달, 없으면 그 예외의 상위클래스가 명시된 catch절을 찾게된다.
- 예외처리문으로서 Exception클래스들의 printStackTrace 메서드가 일반적으로 호출됨.
(e.printStackTrace(); =>
에러메세지의 발생근원지를 찾아서 단계별로 에러를 출력한다.)
(e.printStackTrace(); =>
에러메세지의 발생근원지를 찾아서 단계별로 에러를 출력한다.)
- finally절을 사용해서, (마지막에) 항상실행되는 문장을 추가할 수 있음. 일반적으로, 자원반납을 위해 사용됨.
@@실습 p276~282 5개 예제
예외전가
- 예외처리는 예외가 발생된 메서드에서 처리되지 않고, 호출한 메서드로 전가될 수 있음.
- 호출한 메서드로 전가시키기 위해서,메서드의 선언문에 키워드 throws를 사용하여 발생가능한 예외(CheckedException)를 선언.
- 형식:
... 메서드명(인자목록) throws 예외클래스명 {
... // 예외발생가능한 실행문
}
예)
public void readFile(String file) throws FileNotFoundException,IOException {
FileOutputStream os = new FileOutputStream(file);
while((char = os.read()) != -1) {
...
}
}
public void readFile(String file) throws FileNotFoundException,IOException {
FileOutputStream os = new FileOutputStream(file);
while((char = os.read()) != -1) {
...
}
}
- 호출한메서드에서 try catch블럭을 사용해서 선언된 예외클래스에 대한 예외처리를 하거나 상위호출메서드로 예외전가 할 수 있음.
- 최종적으로 main메서드까지 예외처리가 지연될 수 있음.
- 정상종료를 위해서 main에서는 반드시
....
- 최종적으로 main메서드까지 예외처리가 지연될 수 있음.
- 정상종료를 위해서 main에서는 반드시
....
메서드 선언문의 throws
- 메서드 선언문의 throws를 사용해서 명시적으로 선언하는 예외들은 CheckedException.
- 메서드 내에서 이 예외에 대한 예외처리가 없거나 throws 로 선언되지 않았으면 컴파일 에러발생.
- UnCheckedException(RealtimeException, 그 외 하위클래스들과 Error 클래스)은 선언하지 않음.
- 메서드에서 발생되는 예외가 여러개인 경우throws로 예외선언시 예외클래스를 나열함.
- 형식: 지정자 리턴타입 메서드명([인자]) throw 예외클래스1,예외클래스2,[...]{}
- 메서드가 오버라이딩 되 경우,예외클래스 타입의 축소(오버라이드 된 메서드의 예외클래스와 같거나 그것의 하위클래스만) 또는 적은 수만 가능함.
* Exception : 예외상황
* - 프로그램이 정상적으로 실행되는 과정에서 발생하는 예상치 못한 에러
* Throwable
* Exception의 유형
* 1. CheckedException
* - Compile시 Exception 처리
* 2. UnCheckedException
* - Runtime시 Exception 처리
* - RuntimeException의 Sub class
-------------------------------------------------------
* Exception Handling
* 1. try~catch 구문
* try{
* //예외가 발생할 만한 명령문
* }
* catch(Exception_type 레퍼런스명){
* //예외처리 루틴 ex)printStackTrace/getMessage
* }...
* catch(Exception_type 레퍼런스명){
* //예외처리 루틴
* finally { ////try블럭 안에서 예외사항 발생을 하든 안하든 어떠한 로직을 처리해주기 위함[ex)close //Resource Release]
* }
ex) 상위 예외처리부터 하면 오류
try{
//예외가 발생할 만한 명령문
}
catch(FileNotFoundException 레퍼런스명){
//예외처리 루틴
}...
catch(IoException 레퍼런스명){
//예외처리 루틴
* 2. throws 구문
* ex) throws Exception타입,Exception타입,사용자정의Exception,...
댓글 없음:
댓글 쓰기