Dev/Java

[Java] 예외, 예외 처리 코드 (try, catch, finally)

코딩삐약 2020. 10. 16. 16:42

예외사항 처리(Exception Handling)
프로그램의 오류(error)
1.컴파일 오류 (문법 오류) - 소스 코드 작성 시 발생
2.런타임 오류 (실행 오류) - 실행할 때 발생
 1) Error(Bug) - 프로그램 코드에 의해서 수습될 수 없는 오류
 2) Exception - 코드로 수습 가능한 오류 

예외 처리용 키워드 - try, catch, finally, throw(새로 만들어서 넘길때), throws(메소드 선언문 뒤에)
예외 처리 구문 - try catch(메소드 내부에서만 사용)
문법 
try {
//예외가 발생할 가능성이 있는 코드(문장들)
}catch(Exception 인스턴스){
//예외가 발생했을 때 조치할 코드(문장들)
}catch(Exception2 인스턴스){
//예외가 발생했을 때 조치할 코드(문장들)
}catch(Exception3 인스턴스){
//예외가 발생했을 때 조치할 코드(문장들)
}finally{
//예외가 있건 없건 반드시 실행해야 하는 코드(문장들)
}

예외처리 스스로 하는 계산기 



// try, catch, finally 영역에는 중첩해서 또다른 try, catch, finally
문장을 작성할 수 있다.
// 일반적으로 try문 안에는 또다른 try문을 작성하지 않음.
   catch문 안에 또다른 try문을 작성하는 경우는 종종 있음.
   finally안에 try문을 작성하는 경우는 많음.(DB연동 관련)
   
   강제로 (일부러) 예외사항을 발생시킬 수도 있음.
   예외 인스턴스(객체)를 생성해서 넘김.(throw)
  -> 이것을 활용하여 호출한 메소드 쪽으로 메시지를 보내는 기능으로 활용(최근 이슈)

 throws와 throw의 차이
 throws : 호출한 메소드로 예외를 넘기는 키워드(대상은 호출한 메소드)
 throw : 예외사항을 발생시키는 키워드(대상은 catch문)
 
다음과 같이 한 catch문에서 여러 개의 다른 예외사항을 처리할 수 있다.
catch(NumberFormatException | NullPointerException e) {
...수습용 문장들..;
}
위와 같이 작성하면 NumberFormatException과 NullPointerException을
하나의 catch로 처리할 수 있다.