35. 예외처리
- 예외?
:
프로그램이 실행중에 발생되는 사건
: 자바에서는 Exception
(익셉션) 이라고 한다.
- 예외가 발생되면?
: 프로그램이 '비정상 종료' 된다.
: 일반 사용자는 어떤 문제로 프로그램이 비정상 종료되었는지를 모른다.
(예외 관련된 정보를 제공하지만 일반 사용자는 잘 모른다 ->
영어/전문용어)
- 예외처리?
: 프로그램이 '비정상 종료' 되는 것을 '정상 종료'로 만들어 주는것
: 'Exception handling' 이라고 한다
: 일반 사용자가 어떤 문제로 프로그램을 중단하게 되었는지를 알려줄수
있다.
(일반 사용자에게 영어 대신 한국어로, 전문용어 대신 일반 문장을
사용할수 있다)
- 예외처리 방법 2가지
1) try ~ catch 블럭
try {
//
실행코드
} catch( XXXException e) {
// 실행코드에서 예외
발생시 처리코드 (예외정보 출력하는 정도가 최고의 작업)
}
* 다중 catch 가능
try
{
statement1; // XXXException 발생 가능 코드
statement2; // YYYException 발생 가능
코드
} catch( XXXException e1) {
// 실행코드에서 예외
발생시 처리코드 (예외정보 출력하는 정도가 최고의 작업)
} catch(YYYException e2) {
// 실행코드에서 예외 발생시 처리코드 (예외정보 출력하는 정도가 최고의
작업)
} catch(Exception e3)
----> 계층구조의 하위부터 catch 한다.
* finally 문
: 반드시 수행되어야 하는 문장을 사용할때
예외가 처리되거나 되지 않거나 상관없이 항상 실행되기를 원하는 코드를 포함하고 있다.
일반적으로 파일을 닫거나 자원을 회수하려는 등의 마무리에 사용한다.
ex) try
{
statement1; // XXXException 발생 가능 코드
}
catch( XXXException e1) {
// 실행코드에서 예외
발생시 처리코드 (예외정보 출력하는 정도가 최고의 작업)
} finally {
//예외발생유무에
상관없이 반드시 수행되는 문장
// 일반적으로 자원 반납하는 작업
(IO, DB, )
}
2) throws 키워드 이용
: 메소드 선언시 사용
ex) public void
a() throws XXXException, YYYException { }
: 개념
----> 예외발생한 곳에서 예외처리를 하지 않고, 메소드를 호출한 곳으로 예외를 떠넘기는
방법
ex)
main() {
try {
a();
} catch (xx
e) {
}
}
a() throws ArithmeticException {
b();
}
b() throws ArithmeticException {
int num = 3/0;
}
: 용도
----> 사용자 정의 예외클래스를 사용하기
위해서
----> 분산환경 예외처리를 하기
위해서
----> API 의 Exception 클래스를 이용
* Exception 의 계층구조
Throwable
|
Exception
|
IOException RuntimeException SQLException
| | |
XXXException NullPointerException
... ArithmeticException
IndexOutofBoundsException
...
36.
사용자 정의 예외클래스 생성
- 방법
1) Exception 클래스를 상속받는 클래스 작성
2) 문자열 하나 저장하는
생성자 작성
ex)
public class MyException extends
Exception{
public Myexception( String
mesg ){
super( mesg );
}
}
- 이유?
: API 예외 클래스는 표준 예외클래스
: 모든 어플리케이션의
예외처리를 API 예외 클래스가 담당 하는 것은 불가
: 각 어플리케이션에 적합한 예외클래스를 만들어서 처리한다.
ex)
데이터 검색했는데... 데이터가 없다.. -> '예외' 라고
가정
->
RecordNotFoundException (사용자 정의)
[출처]
자바 Exception,
예외처리 사용자 정의 예외클래스 생성|작성자
적이되고싶은가
출처 : http://blog.naver.com/x_tough_x?Redirect=Log&logNo=140020526763
+
+
- 예외발생 예제
03 |
public class Exception1 { |
04 |
public static void main(String[] args) { |
05 |
int [] var = { 10 , 200 , 30 }; |
09 |
for ( int i= 0 ; i<= 3 ; i++){ |
10 |
System.out.println( "var[" +i+ "] : " +var[i]); |
12 |
System.out.println( "프로그램 끝!" ); |
<< 출력결과 >>
var[0] : 10
var[1] : 200
var[2] : 30
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at com.base.Exception1.main(Exception1.java:10)
- 기본적인 try/catch 구문, 처리순서
03 |
public class ExceptionEx2 { |
04 |
public static void main(String[] args) { |
05 |
System.out.println( "==정상수행==" ); |
06 |
System.out.println( "1" ); |
08 |
System.out.println( "2" ); |
11 |
System.out.println( 5 / 0 ); |
13 |
System.out.println( "3" ); |
15 |
System.out.println( "4" ); |
17 |
System.out.println( "5" ); |
<< 결과값 >>
==정상수행==
1
2
4
5
- 특정한 예외 검출하기
03 |
public class ExceptionEx3 { |
04 |
public static void main(String[] args) { |
05 |
int [] var = { 10 , 200 , 30 }; |
07 |
for ( int i= 0 ; i<= 3 ; i++){ |
09 |
System.out.println( "var[" +i+ "] : " +var[i]); |
10 |
} catch (ArrayIndexOutOfBoundsException ae){ |
20 |
System.out.println( "프로그램 끝!" ); |
<< 결과값 >>
var[0] : 10
var[1] : 200
var[2] : 30
프로그램 끝!
java.lang.ArrayIndexOutOfBoundsException: 3
at com.base.ExceptionEx3.main(ExceptionEx3.java:9)
- 다중 catch문 사용하기
03 |
public class ExceptionEx4 { |
04 |
public static void main(String[] args) { |
07 |
int data = Integer.parseInt(args[ 0 ]); |
09 |
System.out.println(var/data); |
10 |
System.out.println( "----------" ); |
11 |
} catch (NumberFormatException e){ |
12 |
System.out.println( "숫자가 아닙니다." ); |
13 |
} catch (ArrayIndexOutOfBoundsException e){ |
14 |
System.out.println( "입력한 데이터가 없습니다." ); |
15 |
} catch (ArithmeticException e){ |
16 |
System.out.println( "0으로 나눌순 없죠?" ); |
18 |
System.out.println( "나머지 예외는 내가 처리~~" ); |
20 |
System.out.println( "프로그램 종료!" ); |
출처 :
http://jjup77.blog.me/50110267744