반응형
11. 예외 처리하기
자바 예외 API
Throwable : 오류 관련한 객체
Exception : 소프트웨어 프로그램적 오류*
Error : 하드웨어 물리적 오류
int arr[] =new int[3];
arr[3] = 30; // 3번index가 없어서 오류난다!
System.out.println("OK");
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
라고 오류가 난다.
이런 실행문에서 오류처리를 하고 싶다면
ArrayIndexOutOfBoundsException
try{
int[] arr =new int[3];
arr[3] = 30; // 3번index가 없어서 오류난다! (1)
System.out.println("OK");
}catch(ArrayIndexOutOfBoundsException e){ //(2)
System.out.println("fail"); //(3)
}
System.out.println("2"); //(4)
NullPointerException
try{
int[] arr =new int[3];
arr[3] = 30; // 3번index가 없어서 오류난다! (1)
System.out.println("OK");
//------
String s = "java";
int len = s.length();
s = null;
s.length(); // new NullPointerException() null
}catch(ArrayIndexOutOfBoundsException e){ //(2)
System.out.println("fail"); //(3)
}catch(NullPointerException e2){
System.out.println("null값 ");
}
System.out.println("2"); //(4)
catch 문은 여러개 있을 수 있다.
Exception
catch(Exception e3){ } // 앞에다 두면 오류 대부분 오류를 처리하기 때문에 밑에 오류처리를 못하게 된다.
catch(ArrayIndexOutOfBoundsException e){
System.out.println("fail");
}catch(NullPointerException e2){
System.out.println("null값 ");
catch(ArrayIndexOutOfBoundsException e){
System.out.println("fail");
}catch(NullPointerException e2){
System.out.println("null값 ");
}catch(Exception e3){ } // 뒤에다 두면 ArrayIndexOutOfBoundsException오류 먼저 처리하고 NullPointerException오류 처리한 후에 나머지 오류 모두 처리하기 때문에 오류 아니다
finally문
try catch 를 빠져나올 때 반드시 실행하게 해둘 수 있다.
자원 해제 하는 코드를 finally블록에 많이 쓴다.
오류가 발생했던 안했던 무조건 실행한다.
try{
System.out.println("1");
System.out.println("2");
System.out.println("3");
}catch(Exception e3){
System.out.println("오류");
}finally{
System.out.println("OK");
}
try catch 밖에다 해도되지않나 ? 소스의 가독석 때문
예외 던지기 thorws문
void f(){
//오류가 발생할 수 있다.
try{
}catch(~~~){
}
}
이 f()는 A, B.. 라는곳에서 호출 할 수 있다. 그러면 A ,C ,B가 가져다 쓸때는 항상 catch(~~)맞게만 처리한다.
동적으로 A, B상황에 맞게끔 처리하고 싶다면?
바디 시작하는 부분에 throw~~~ exception .. 이런 exception 이 발생할 수 있는데 호출하는 부분에서 처리하라는 의미
System.in.read();
라고 치면 throws 이던가 try catch 로 처리해달라고 오류문구가 나온다.
사용자 정의 예외 객체
내가 만들어서 사용하고 싶다면 Exception 객체를 상속받아서 추가 한다.
public class MyException extends Exception{
public MyException(){
super("음수는 허용하지 않습니다.");
//어떤 상황에 뭐가 발생할지 모르니까 내가 직접 해줘야 한다.
}
}
int num = -20;
if (num < 0) {
try {
throw new MyException();
} catch (MyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
자바기반 웹 크롤링(jsoup) (0) | 2019.08.02 |
---|---|
12. 입출력 작업하기 (0) | 2019.02.12 |
10. 컬렉션 API활용하기 (0) | 2019.02.12 |
09. 기본 API활용하기 (0) | 2019.02.11 |
08. 다형성과 내부클래스 (0) | 2019.02.11 |