예외(Exception)
- 예기치 않은 상황
- 컴파일 시에 발생하는 문제가 아니라 프로그램 실행 시에 사용자의 부주의 등으로 일어나는 예기치 않은 상황
- 그런 상황에 대한 처리를 "예외 처리"라 한다.
- 자바는 대부분의 예외상황에 대한 클래스가 이미 만들어져 있다. 그 상황이 되면 자동으로 예외클래스형의 객체가 생성된다. 예를 들어 아래와 같은 상황에서는 예외가 발생한다.
- int a = 0;
int b = 4;
float r = b/a; - 위 문장을 만나면 new ArithmeticException() 이 자동 발생. 0으로 나눌수는 없기 때문에.
- int a = 0;
<< 예외 처리 방법 >>
- try ~ catch로 직접 처리 하는 방법
- throws 키워드로 예외를 메소드 호출하는 쪽으로 맡기는 방법
해당 메소드를 사용하는 쪽으로 예외를 던지는 것
해당 키워드를 예외를 발생 시킨 메소드명 뒤쪽에 쓰면, 해당 메소드를 사용하는 경우 예외 처리를 해줘야 한다.
ㅇ try ~ catch 방법
public void someMethod()
{
try{
예외가 발생할 만한 문장들;
}catch(예외 클래스 변수명){
처리할 문장;
}
}
ㅇ throws 방법
public 리턴타입 someMethod(매개변수들)throws 예외 클래스명1, 예외클래스명2,...
{
예외가 발생할 문장들;
}
예외처리 방법
try
{
예외가 발생할 만한 문장들….
}catch( 예외클래스명1 변수명)
{
처리할 문장1
}
catch( 예외클래스명2 변수명)
{
처리할 문장2
}
catch( 예외클래스명3 변수명)
{
처리할 문장3
}finally{
예외가 발생되거나 그렇지 않든 반드시 처리할 문장들...
}
하나의 try에 여러 개의 catch가 올 수 있다. 이때는 반드시 범위가 작은 Exception 순으로 와야 한다. 예외가 발생하건 그렇지 않거나 반드시 동작할 문장은 finally에 기술한다.
사용자 정의 예외 throw
강제 예외 발생 시키기 throw
자바는 예기치 않은 상황이 되면 자동으로 예외객체를 생성한다.
대부분의 예외에 대하여 이미 클래스로 만들어져 있지만, 필요하다면 사용자가 강제로 예외를 발생할 수도 있다.
Exception 클래스를 확장한 의미 있는 예외클래스 이름을 정해 준다. 생성 시 예외 메시지를 전달 받아 부모 클래스에게 전달해 준다.
class 새로운예외클래스이름 extends Exception{
public 새로운 예외클래스이름(String msg) //생성자
{
super(msg);
}
}
이 상황은 자바가 모르고 있는 상황이기 때문에 우리가 강제로 예외를 발생 시켜야 한다.
throw new 새로운 예외클래스이름("예외메시지");
throw new ~~Exception( );
이것도, try로 예외 발생된 것을 처리 할 수 있다.
=>> if문으로 처리를 해도 되지만, 이러한 "문제의 상황"으로 이해관계가 있는 사람들끼리 "명세화"하고자 할 때 사용자 정의 예외를 이용한다.
ㅇ 강제 예외 발생 예시
class ExceptionTest03
{
public static void main(String[] args)
{
System.out.println("강제로 예외 발생");
throw new NumberFormatException();
}
}
(결과값)
강제로 예외 발생
Exception in thread "main" java.lang.NumberFormatException
at ExceptionTest03.main(ExceptionTest03.java:6)
반응형
'Java | spring > Java Basic' 카테고리의 다른 글
Java, 동시 실행 스레드! Multi Thread 프로그래밍 (0) | 2019.05.08 |
---|---|
Java RuntimeException, 자동 예외객체 생성 (0) | 2019.05.08 |
자료구조, Stack 스택과 큐 Queue (0) | 2019.05.07 |
JAVA 제네릭 정의와 필요성 (+ArrayList 타입 오류 이유) (0) | 2019.05.07 |
배열과 컬렉션프레임워크(List, set, map)의 차이 (0) | 2019.05.07 |
댓글