예외 처리
예외 개념
•
단순한 문법 오류가 아닌 실행 중간에 발생하는 정상적이지 않은 상황
◦
사용자의 잘못된 입력
◦
개발자의 잘못된 코딩으로 발생한다.
•
예외처리를 하지 않으면 프로그램은 종료된다.
•
jvm은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성한다.
빈번하게 나타나는 실행 예외
1.
NullPointerException
a.
null값을 갖는 참조 변수로 객체 접근 시 나타나는 예외
2.
ArrayIndexOutOfBoundsException
a.
배열에서 인텍스 범위를 초과하여 사용할 경우 나타나는 예외
3.
NumberFormatException
a.
“100”을 Wrapper 클래스의 메소드를 사용하여 정수로 변환하면 정수 100으로 변환된다.
b.
이때 “a100”을 정수로 바꿀려고 할때 a로 인해 정수로 변환되지 못하는 예외가 발생한다.
4.
ClassCastException
a.
억지로 타입 변환을 시도할 때 나타나는 예외이다.
예외 처리 try catch
try catch finally 예제
•
일반 예외, 실행 예외는 위와 같이 처리해줄 수 있다.
•
jvm이 Exception 객체를 생성시켜준다.
•
Eception 클래스는 자식 클래스를 가지고 있다.
◦
다형성이 적용된다.
•
finally는 정상실행을 해도 무조건 실행된다.
◦
try문에서 return이 실행되어도 finally 구문은 무조건 실행된다.
◦
finally는 리소스를 반환할 때 쓰인다.
•
catch문은 여러 개 작성할 수 있다. (다중 catch)
◦
상위예외클래스가 하위예외클래스보다 아래에 위치해야 한다.
◦
상위예외클래스를 맨위에 작성하면 컴파일 에러가 뜬다.
자바 8 버전부터 멀티 catch 기능을 사용할 수 있다.
throws
package java_0928;
import java.io.IOException;
public class ThrowsTest {
public static void main(String[] args) throws IOException {
byte[] byteArr = {'a','b','c'};
System.out.write(byteArr);
}
}
Java
복사
•
throws는 예외처리를 호출한 함수한테 맡긴다는 뜻
•
jvm한테 IOException을 던지겠다.(내가 처리 안하고) = 테스트용으로 에러 처리하겠다.
◦
main함수도 throws를 한 경우다.
•
throws를 한 메소드를 호출할 경우
◦
try/catch문으로 예외처리한다.
◦
throws를 적어서 다른 곳으로 넘긴다
예외 클래스 구분
에러 개념
•
에러는 jvm 실행에 문자가 생긴 것이다.
◦
개발자가 대처할 방법은 프로그램을 다시 짜는 것
◦
즉, 에러를 처리할 방법은 없다.
예외 종류
•
예외에는 두가지 종류가 있다
◦
일반예외(Checked Exception) : 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사한다. 예외처리 코드가 없다면 컴파일 오류가 발생한다.
◦
ex IOException
◦
실행예외(Unchecked Exception) : 컴파일 과정에서 예외 처리 코드를 검사하지 않는다.
◦
runtime때 일어난다.
사용자 정의 예외
public class XXXException extends [Exception 혹은 RuntimeException]{
public XXXException(){}
public XXXException(String message){super(message);}
}
Java
복사
•
프로그램을 작성할 때 프로그래머가 어떠한 조건에서 예외를 발생해야 하는 상황이 온다.
•
이때 사용하는 것이 사용자 정의 예외이다.
•
사용자 정의 예외 클래스를 작성할 때는 반드시 public class로 작성해야한다.
•
예외를 발생시키기 위해서는..
◦
throw new XXXException(”어떠한 이유때문에 예외가 발생되었다는 메세지”);
◦
위 같이 예외 객체를 생성해줘야 한다.
◦
그리고 throw를 해준다.
사용자 정의 예외 발생 예제