위 스크린샷의 내용은 int 타입의 배열 i에 1,2,3을 넣은 뒤 파라미터 j를 받아
i 배열의 j번째 값을 호출하는 메소드인데
보면 1,2,3만 넣었으므로 배열의 크기는 3이고
배열의 4번째 값을 호출하려고 하니 예외가 발생하는 것이 보인다
이제 이러한 예외가 발생했을 경우 예외처리 방법은 총 3가지가 있는데
1. try {} catch {} 사용
2. throws 사용
3. throw 사용
차례대로 한번 알아보자
가장 먼저 try {} catch {}를 사용하는 방법인데
예외가 발생할만한 위치를 try {} 로 감싼다
이후 예외가 발생할 경우에는 catch(예외명) {} 에서 처리하게 되는데
내 경우에는 ArrayIndexOutOfBoundsException 만 처리할 생각으로
ArrayIndexOutOfBoundsException e를 넣었지만
모든 예외를 다 한곳에서 처리하고 싶을 경우에는
Exception e를 넣어주면 된다
printstacktrace() 메소드는 에러 내용을 출력하는데 사용된다
이후 finally {}는 예외 여부와 상관없이 무조건 수행하는 문장인데
finally는 추가하지 않아도 된다
이제 코드를 한번 읽어보자면 try {} 영역 안에서 예외가 발생할 시
catch() {}에 지정한 예외처리 부문으로 이동하여 예외 처리를 하게 되고
마지막으로 finally {} 를 수행하며 끝이 나게 된다
다음으로는 throws를 이용하여 예외를 처리하는 방법인데
throws는 예외가 발생한 곳에서 처리하는 것이 아니라
예외가 발생할 코드를 호출한 곳에서 예외를 처리한다
즉 메소드에 throws 예외명을 넣어주면
처음 메소드를 호출한 et.call(4); 에서 try {} catch(){} 문을 작성하는 것이다
마지막으로는 throw를 이용한 예외 처리인데
throw를 이용하여 커스텀 예외처리를 할 수 있다
먼저 예외처리를 할 클래스를 하나 만들어야 하는데
여기서는 CustomException이다
extends Exception을 한 후에
생성자에서 바로 CustomException에서 에러 처리가 뜨게 해 놓았다
이후 사용할 클래스에서 throw new 예외처리클래스명(); 을 통해 사용할 수 있다
이제 정리해보자면
예외처리는
1. 실제 사용하는 곳에서 try {} catch(){}를 사용하거나
2. throws를 이용해 호출한 곳에서 try{} catch(){}를 사용하거나
3. throw new 클래스명(); 을 통해 다른 클래스에서 예외처리하는 방법이 있다
사용한 코드들은 아래와 같다
// try{} catch(){} 예외처리 예제
public class ExceptionTest {
public void call(int j) {
try {
int[] i = {1,2,3}; // int 타입의 배열 i 초기화
System.out.println("call value : " + i[j]); // 배열 i의 j번째 값 불러오기
} catch(ArrayIndexOutOfBoundsException e) { // ArrayIndexOutOfBoundsException exception 발생 시 수행
System.out.println("배열 크기에 맞는 값을 입력하세요!");
e.printStackTrace(); // 에러 내용 출력
} finally { // Exception 여부와 상관없이 수행
System.out.println("해당 문장은 무조건 수행");
}
}
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest(); // 객체화
et.call(4); // call 메소드 호출
}
}
// throws 예외처리 예제
public class ExceptionTest {
public void call(int j) throws ArrayIndexOutOfBoundsException { // throws는 호출한 곳에서 예외처리
int[] i = {1,2,3}; // int 타입의 배열 i 초기화
System.out.println("call value : " + i[j]); // 배열 i의 j번째 값 불러오기
}
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest(); // 객체화
try {
et.call(4); // call 메소드 호출
} catch(ArrayIndexOutOfBoundsException e) { // ArrayIndexOutOfBoundsException exception 발생 시 수행
System.out.println("배열 크기에 맞는 값을 입력하세요!");
e.printStackTrace(); // 에러 내용 출력
} finally { // Exception 여부와 상관없이 수행
System.out.println("해당 문장은 무조건 수행");
}
}
}
// throw 예외처리 예제(클래스)
public class CustomException extends Exception {
public CustomException() {
System.out.println("CustomException에서 예외 처리");
}
}
// throw 예외처리 예제(실 사용)
public class ExceptionTest {
public static void main(String[] args) {
try {
throw new CustomException(); // CustomException 클래스에서 예외 처리
} catch(Exception e) {
// CustomException() 외의 예외 처리
}
}
}
'Language > Java' 카테고리의 다른 글
자바 다형성(Polyporhism)이란? & 예제 (0) | 2019.11.12 |
---|---|
자바 Error Exception 차이 정리 (0) | 2019.11.11 |
자바 추상클래스 예제 및 사용이유 정리 (0) | 2019.10.30 |
자바 인터페이스 예제 및 사용 이유 정리 (0) | 2019.10.29 |
자바 extends Thread, implements Runnable 차이 (0) | 2019.10.23 |
댓글