try~catch문을 사용했을 때와 메서드에 throws를 사용했을 때의 차이점

2018. 8. 9. 15:18 JAVA/Java

메서드 를 선언 할 때 throws를 사용하여 처리를 하게되면 해당 예외상황이 일어났을 때

'기본적인 예외상황 처리'가 수행된 후 프로그램이 종료된다.

그런데

try{
}catch(){
}
를 사용했을 경우에는 프로그램 실행중에 예외상황이 발생하면

catch문을 실행하고 프로그램이 종료되는것을 설정할 수 있다.
즉, 프로그램을 안죽이고 계속 아래구문을 수행하는 것이 가능하다. 물론 프로그램이 종료되도록 수행하는 것도 가능하다.

예제)
- try catch 구문 사용 -

public class ExceptionTest1 {
 public static void main(String[]args){
  int a=10;
  int b=0;
  int c=0;
  try{
    c=a/b;
  }catch(NumberFormatException e){
   System.out.println("catch2 실행");
  }catch(ArithmeticException e){
   b=1;
   c=a/b;
   System.out.println("catch1실행");
    
  }catch(Exception e){
   System.out.println("catch3 실행");
  
  }
  System.out.println("내가 출력 될까요?");
  System.out.printf("%d/%d=%d\n",a,b,c);
  System.out.println("main 끝!!");
 }
}

/*
 * 출력 결과
 * catch1실행
 * 내가 출력 될까요?
 * 10/1=10
 * main 끝!!ArithmeticException e
 * 
 * 0으로 나눌 수 없으므로 Arithmetic예외가 발생하여 catch문을 수행 후 
 * 다음 구문인 "내가 출력 될까요?"가 출력된다. 그리고나서 계속적으로 수행 후 main이 종료된다.

 */

- throws사용 -
public class ExceptionTest1 {
 public static void main(String[]args) throws Exception{
  int a=10;
  int b=0;
  int c=0;
  
  c=a/b;
  
  System.out.println("내가 출력 될까요?");
  //초기화 않된 지역변수 사용불가
  System.out.printf("%d/%d=%d\n",a,b,c);
  System.out.println("main 끝!!");
 }
}

/*
 * 출력 결과
 * Exception in thread "main" java.lang.ArithmeticException: / by zero
 * at com.skcc.exception.ExceptionTest1.main(ExceptionTest1.java:36)
 * 
 * ArithmeticException: / by zero가 나오면서 종료 ("내가 출력 될까요?" 나오지 않음.)
*/


출처 : http://egloos.zum.com/hanvic/v/3299477