본문 바로가기
프로그래밍 언어/JAVA

11. 예외 처리하기

by zieunee 2019. 2. 12.
반응형


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