8.1.1 프로그램 에러 종류
- 컴파일 에러 : 컴파일 시에 발생하는 에러
- 런타임 에러 : 실행 시에 발생하는 에러
- 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것
8.1.2 에러와 예외
- 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외(exception) : 프로그램 코드에서 수습될 수 있는 다소 미약한 오류
8.1.3 예외 클래스의 계층구조
예외의 두 그룹
- Exception클래스와 그 자손(RuntimeException제외)
- RuntimeException클래스와 그 자손
8.1.4 예외처리(try-catch)
- 목적 : 프로그램의 비정상적 종료를 막고, 정상적인 실행상태를 유지하는 것
- 정의 : 프로그램 실행시 발생할 수 있는 예외에 대한 코드를 작성하는 것
- 구조
try{
//예외가 발생할 거 같은 부분 작성
}catch(Exception e){
//catch의 작성된 예외 발생시 작성
}
/*
catch가 여러개 있을경우 예외의 종류와 일치하는 단 한 개의 catch블럭만 수행됨.
{}괄호 생략 불가
*/
8.1.5 중복된 try-catch
try{
try{
}catch(Exception e){
}
}catch(Exception e){
try{
}catch(Exception e){ //Error! 중복된 try-catch문에서 같은 변수를 사용할 수 없다.
}
}
8.1.6 try-catch문의 흐름
- try 블럭 내부에서 예외가 발생한 경우
- 예외에 일치하는 catch 블럭이 있는지 확인한다
- 일치하는 catch 블럭을 찾게되면 해당 블럭 내 문장을 수행한다. 찾지 못하는 경우 예외가 처리되지 못한다.
- try 블럭 내부에서 예외가 발생하지 않는 경우
- catch 블럭을 거치지 않고 전체 try-catch 문을 빠져 나가서 수행을 계속한다.
Sysyem.out.println("출력:");
try{
Sysyem.out.println(1);
Sysyem.out.println(0/0); //정수를 0으로 나눌 수 없음
Sysyem.out.println(2);
}catch(ArithmeticException ae){
Sysyem.out.println(3);
}
Sysyem.out.println(4);
/*
출력:
1
3
4
*/
8.1.7 예외 발생과 catch 블럭
- 예외 발생시 예외에 해당하는 클래스의 인스턴스 생성
- 예외 발생시 생성된 인스턴스와 catch의 참조 변수를 instanceof 연산자를 통해 검사
try{
Sysyem.out.println(0/0); //ArithmeticException예외 인스턴스 생성
}catch(ArithmeticException ae){ //instanceof연산자로 예외 인스턴스와 참조변수 확인
if(ae instanceof ArithmeticException)
System.out.println("true");
}catch(Exception e){ //위에서 예외처리가 되므로 실행 안됨
Sytem.out.println("false");
}
/*
true
*/
8.1.8 printStackTrace()와 getMessage()
- printStackTrace() : 예외 발생시 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
- getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻음
8.1.9 멀티 catch 블럭
- 여러 catch블럭을 '|'기호를 이용하여 하나의 catch블럭으로 만듦
try{
}catch(ExceptionA | ExceptionB e){
e.printStackTrace();
}
try{
}catch(ExceptionA | ExceptionB e){
if(e instanceof ExceptionA){
ExceptionA e1 = (ExceptionA)e;
return e;
}
}
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 8.3 사용자정의 예외 (0) | 2022.06.17 |
---|---|
자바의 정석 - 8.2 예외 발생시키기 (0) | 2022.06.17 |
자바의 정석 - 7.11 내부 클래스 (0) | 2022.06.13 |
자바의 정석 - 7.10 인터페이스 (0) | 2022.06.13 |
자바의 정석 - 7.9 추상 클래스 (0) | 2022.06.13 |