* 런타임 예외는 반드시 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("프로그램 종료");
}
}
'자바' 카테고리의 다른 글
재미있는 예제 (0) | 2013.05.28 |
---|---|
checked Exception (0) | 2013.05.28 |
class 클래스 (0) | 2013.05.25 |
replaceAll의 알고리즘 (0) | 2013.05.25 |
자바 패턴매칭 (0) | 2013.05.24 |