예외처리
8.1 (예외처리)
1. 예외처리
- 프로그램 오류
- 컴파일 에러: 컴파일 타임에 발생하는 오류
- 런타임 에러: 런타임에 발생하는 오류
- 논리적 에러: 프로그램이 의도와 다르게 동작 되는것
- 런타임 에러
- 오류(error)
- 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 ex) 메모리부족, 스택 오버플로우
- 예외(exception)
- 프로그램 코드에 의해서 수습 될 수 있는 다소 미약한 오류
- 예외처리를 위한 코드를 미리 작성함으로써 대응
- 오류(error)
- 오류, 예외 주요 클래스 계층 구조
- Throwable
- Exception
- RuntimeException, IOException, …
- Error
- OutOfMemoryError, …
- Exception
- Throwable
- RuntimeException
- 이 클래스의 자손 클래스들은 주로 프로그래머의 실수에 의해 발생하는 예외와 상관
- 그 외의 Exception의 자손 클래스들은 주로 사용자의 동작에 의해 발생하는 예외와 상관
- 예외처리
- 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것
- 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하기 위함
- printStackTrace()
- 예외발생시점의 호출스택에 있던 메서드의 정보와 예외 메세지 출력
- getMessage()
- 발생한 예외 클래스의 인스턴스에 저장된 메시지를 반환
-
멀티 catch블럭
try { } catch (ExceptionA | ExceptionB e) { e.printStackTrace(); } // | 로 예외 클래스 연결가능, 개수제한 없음 단, 상속관계에 있는 클래스는 연결 불가 // 연결된 클래스들의 조상 클래스의 멤버만 사용가능
-
try-with-resources
try(FileInputStream fis = new FileInputStream("Text"); //괄호내 문장이 복수면 ;로구분 DataInputStream dis = new DataInputStream(fis)) )
- try괄호 내 AutoCloseable 인터페이스의 close() 구현을 호출 할 수 있는 인스턴스를 생성하면 try블럭을 벗어날 때 자동으로 close()를 호출
- try괄호 내 인스턴스의 메서드에서 예외가 발생하고, close()가 실행될때 close()에서도 예외가 발생한다면 처음 발생한 예외의 억제된 예외 리스트에 억제된 예외로 나중에 발생한 예외가 추가된다 만약, 기존의 try-catch를 사용한다면 먼저 발생한 예외는 무시되고 나중에 발생한 예외만 전달된다
Leave a comment