자바에서는 오류를 Error와 Exception으로 나누고 클래스로 구현하여 처리하도록 하였다. Error 클래스는 외부적인 요인으로 발생하는 오류이기 때문에 개발자가 대처할 수 없다.
예외
프로그램의 정상적인 실행을 방해하는 사건
- 컴파일 에러 : 컴파일 시에 발생하는 에러
- 런타임 에러 : 실행 시에 발생하는 에러
- 논리적 에러 : 실행은 되지만 의도와 다르게 동작하는

예외 종류로 Checked Exception과 Unchecked Exception으로 나뉜다. 예외 처리 동작의 필수 지정 유무에 따라 나뉘기 때문이다.

유형 | ex | ||
Unchecked Exceoption | Error | 프로그램 외부에서 발생한 예외 | H/W 또는 System 오동작 IOError 예외 자동 발생 |
Runtime-Exceoption | program logic error 부적절한 API 사용 |
fileName이 null인 경우 NullPointerException 자동 발생 |
|
Checked Exception | 표준 검사 예외 | 예외 처리 필수 컴파일러가 예외 처리 여부를 검사 |
파일이 존재하지 않는 경우 FileNotFoundException 자동 발생 |
사용자 정의 예외 | 예외(객체)를 명시적으로 발생시켜야 함: if(조건) new 예외타입(); |
예외 처리 방법
1. 예외가 발생한 메소드에서 직접 처리 try-catch
int a = 5
int b = 0
try{
System.out.println(a/b);
}catch (ArithmeticException e){
System.out.println("0으로 나눌 수 없습니다.");
}finally {
//...
}
try 블록 실행 도중 예외 발생?
NO > (try block 정상 종료 후) finally 블록 실행
YES > try 블록 즉시 종료 > catch 블록 실행 > finally 블록 실
2. 자신을 호출한 메소드에게 예외를 넘긴다(예외 전파)throws
public static int aMethod(int a, int b) throws ArithmeticException{
return a/b;
}
public static void main(String[] args) {
int a = 5;
int b = 0;
try{
aMethod(a,b);
}catch (ArithmeticException e){
System.out.println("0으로 나눌 수 없습니다.");
}finally {
//...
}
}
발생한 예외를 처리할 catch 블록을 만날 때까지 전파함.
outer blocks > callers > JVM
*try with resource
명시적 예외 발생 throw
명시적으로 예외를 발생시킨다.
int a = 5;
int b = 0;
try{
if(b==9) throw new ArithmeticException("zero");
else if(b<0) throw new ArithmeticException("negative");
else
a = a/b;
}catch (ArithmeticException e){
System.out.println(e.getMessage());
}finally {
//...
}
'공부 > Java' 카테고리의 다른 글
다형성 Polymorphism (0) | 2024.02.22 |
---|---|
자바 추상 클래스와 인터페이스 (0) | 2024.02.14 |
자바 상속 - 클래스 타입 변환 (0) | 2024.02.14 |
자바 상속 - super, this 예제 (0) | 2024.02.08 |