컴파일 에러 : 컴파일 할 때 발생하는 에러
자바 컴파일러가 하는일
.c 파일이 만들어지지 않음
런타임 에러 : 실행 할 때 발생하는 에러
- 에러(error) :프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
논리적 에러 : 작성 의도와 다르게 동작
에러는 어쩔 수 없지만 예외는 처리하자
예외 처리의 정의와 목적
정의 : 프로그램 실행 시 발생 할 수 있는 예외의 발생에 대비한 코드를 작성하는것
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
예외 클래스의 계층 구조
Throwable : 모든 오류의 조상
Exception : 미약한 오류
Error : 심각한 오류
try{ //if문은 한줄일때 {}생략 가능하지만,try-catch문은{} 생략불가
//예외가 발생할 가능성이 있는 문장들을 넣는다.ex)쇼핑
}catch(Exception1 e1){
//Exception1이 발생했을경우, 이를 처리하기 위한 문장을 적는다.ex)돈이부족
}catch(Exception2 e2){
//Exception2가 발생했을경우,이를 처리하기 위한 문장을 적는다.ex)물건부족
}catch(ExceptionN eN){
//ExceptionN이 발생했을경우,이를 처리하기 위한 문장을 적는다.ex)가게 문닫음
}
class Ex8_1{
public static void main(String args[]){
System.out.println(1);
try{
System.out.println(2);
System.out.println(3);
} catch(Exception e){
System.out.println(4);
}
System.out.println(5);
}
}
결과
1
2
3
Exception이 발생하지 않았기 때문에 1235가 실행됨.
class Ex8_1{
public static void main(String args[]){
System.out.println(1);
try{
System.out.println(0/0);
System.out.println(2);
} catch(ArithmeticException ae){
System.out.println(3);
}
System.out.println(4);
}
}
결과
1
3
4
0/0은 할수 없으므로, ArithmeticException 발생
class Ex8_4{
public static void main(String args[]){
System.out.println(1);
System.out.println(2);
try{
System.out.println(3);
System.out.println(0/0); //0으로 나눠서 ArithmeticException 발생시킨다.
System.out.println(4);
} catch(ArithmeticException ae){
if(ae instanceof ArithmeticException)
System.out.println("true");
System.out.println("ArithmeticException");
} catch(Exception e){
System.out.println("Exception");//ArithmeticException을 제외한 모든 예외를 처리한다. //모든 예외의 최고조상, 모든예외 처리 가능
}
System.out.println(6);
}
}
예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
일치하는 catch블럭이 없으면, 예외는 처리 안됨
Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch블럭으로 쓰임)