예외(exception)
이라고 한다.예외처리
라 하고, 예외를 처리하는 부분을 예외처리기
라고 한다.예외 | 설명 |
---|---|
Constraint_Error | 배열 첨자 혹은 부분 범위 경계 초과 오류, 오버플로, 0으로 나누기 등으로 발생 |
Program_Error | 선언의 동적처리의 실패했을 때 |
Storage_Error | 동적 메모리로 할당에 실패했을 때 |
Tasking_Error | 병행성 제어 오류에 의해 발생 |
begin
'''
exception
when 예외이름1 =>
문장들
when 예외이름2 =>
문장들
end;
예약어
My_Error : exception
위의 예약어는
raise My_Error
라고 작성해야 발생
처리기를 찾아 주변부터 탐색 시작. 만약에 없으면 그 부분을 호출한 곳으로 거슬러 올라가서 탐색.
예외처리 할만큼 하고 다시 전파. 이 때 꼭 raise 명시해야함
pragma suppress(범위_체크);
위처럼 작성하면
범위_체크
부분의 범위 검사를 하지 않음
try {
``` /* 예외 발생 영역 */
}
catch( 형식 매개변수 ) { /* int, float, double 등등 */
``` /* 예외 처리 영역 */
}
catch(...) { /* 만능! */
}
throw x;
예외가 발생하면 처리기를 주변부터 찾아 나가고 없으면 Ada처럼 호출한 곳까지 거슬러 올라가서 찾는다.
하지만, 처리기를 결국 찾지 못한다면
terminate()
가 호출되면서 프로그램이 종료된다
쉽게 말해서 try 갔다가 catch 못찾으면 terminate()
발생 후 종료
ex) 1
void sub() throw(int, double)
int
, double
은 처리 하고 다른거 뜨면 unexcepted()
발생하고 종료합니다.ex2 )
void sub() throw()
{
```
}
ex3 )
void sub()
{
```
}
예외 | 설명 |
---|---|
ArithmeticException | 0으로 나누기, 산술오류 |
ArrayIndexOutOfBoundsException | 배열 첨자 범위경계 초과 오류 |
NegativeArraySizeException | 배열 크기를 음수로 저장했을 때 |
NullPointerException | null 객체에 접근했을 때 |
object
|____ Throwable
|________ Exception
| |_________IOException -- 입출력 오류
| |_________RuntimeExcept -- 0 나누기, 배열첨자범위 초과 등
| |_________... 프로그램 실행 관련 오류
| |_________사용자 정의예외 -- 사용자 정의
|
|________ Error
|_____ ...
|_____ ...
|_____ outofMemory
try {
```
}
catch {
```
}
finally {
```
}
finally
절은 무조건 실행된다.발생한 예외처리가 해당 부프로그램에 없으면 호출프로그램에 전파되는데
어떤 예외가 발생하는지 명시해야한다.
ex1)
try {
system.out.println( ~~~ ); <=== 발생!!!
}
catch( ~~~~ ){
``` <=== 실행!!!
}
ex2) 예외처리 발생하는 문장 만들기
public class myException extends Exception
throw new myException();