본문 바로가기

자바

unchecked exception


 * 런타임 예외는 반드시 try~catch 할 필요 없다.

 * 런타임 예외의 예 : 수를 0으로 나눔

 *  배열의 범위를 넘어서는 첨자를 사용

 *  메모리 할당이 되지 않은(null) 객체를 사용

 *  숫자가 아닌 문자열을 숫자로 변환 등

 * 런타임 예외 -> unchecked exception (반드시 할 필요는 없지만 검사하는게 좋다)

 * 종류 아주아주 많음


예제1)


public class Test1 {

public static void main(String[] args) {

/* 런타임 오류 

String s="10a";

int a=Integer.parseInt(s); // 런타임 오류가 발생

// 런타임 오류가 발생하면 에러 메시지를 콘솔에 출력하고 프로그램을 바로 종료함

System.out.println(a);

System.out.println("프로그램 종료...");

*/

String s="10a";

try{

int a=Integer.parseInt(s);

System.out.println("숫자 : " +a);   //  숫자 변환을 못해 NumberFormatException 발생 => 숫자로 못바꿀때

// }catch(NumberFormatException e){   // 어떤 예외가 발생할지 알고 있다면 직접 써준다.

}catch(Exception e){   // 모든 예외는 Exception으로 잡을 수 있다.

//System.out.println(e.toString());   //e.toString() 어디에 에러가 있는 확인 가능

e.printStackTrace();   //일반적인 에러메시지 출력

System.out.println("숫자로 변환을 못해"); //에러났을 때 실행되는 catch문

}

System.out.println("프로그램 종료.....");

}

}


예제1 결과) 


java.lang.NumberFormatException: For input string: "10a"

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at com.test0524.Test1.main(Test1.java:28)

숫자로 변환을 못해

프로그램 종료.....


=======================================================================================================================================

예제2)


import java.io.BufferedReader;

import java.io.InputStreamReader;


public class Test3 {

public static void main(String[] args) {


String s="10a";

int a;

try{

a=Integer.parseInt(s); 

}catch(Exception e){

System.out.println("변환 오류...");

}

// try~chatch 블럭의 내용을 반드시 실행한다는 보장을 받지 못해서 a가 초기화가 되지 않았으므로 에러.

// try~catch 문장을 없다고 생각하고 보면 분명한 에러가 보인다.

System.out.println(a);

}

}


예제2 결과)


컴파일에러


=========================================================================================================================================


예제3)


import java.io.BufferedReader;

import java.io.InputStreamReader;


public class Test3 {

public static void main(String[] args) {

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

try{

int a;

System.out.println("수 ?");

a=Integer.parseInt(br.readLine());

System.out.println(a); // 예외 발생시 실행 않함.

}catch(Exception e){ // 예외 발생시만 실행

System.out.println("변환 오류...");

}finally{         // 예외 발생시와 발생하지 않아도 실행

System.out.println("예외가 발생하든 말든 실행...");

}

System.out.println("종료"); // 위의 예외와 상관 없이 실행

}

}


예제3 결과)


수 ?1

1

예외가 발생하든 말든 실행...

종료


=========================================================================================================================================

예제4)


public class Test2 {

public static void main(String[] args) {

int a[]=null;

try{

a=new int[4];

a[3]=10;

System.out.println(a[3]);

String s="10a";

int b=Integer.parseInt(s);

System.out.println(b);

}catch(NullPointerException e) { // Null만 catch한다.

System.out.println("메모리 할당이 안됌...");

}catch(ArrayIndexOutOfBoundsException e) {

System.out.println("첨자를 벗어남.....");

}catch(Exception e){

System.out.println("예외...........");

}

System.out.println("프로그램 종료");

}

}


예제4 결과) catch를 연속 사용할 때는 작은 범위부터 사용하여야 한다. 일반적으로 Exception을 써서 모든 예외를 한번에 처리하기 때문에 잘 사용은 안한다고 함

10
예외...........
프로그램 종료

'자바' 카테고리의 다른 글

재미있는 예제  (0) 2013.05.28
checked Exception  (0) 2013.05.28
class 클래스  (0) 2013.05.25
replaceAll의 알고리즘  (0) 2013.05.25
자바 패턴매칭  (0) 2013.05.24