프로그램 실행 도중 오류로 인해 프로그램이 중단될 상황에서 중단되지 않고 예외처리 가능하다.
① 직접 처리
try { //일반적인 코드 } catch( ... Exception 변수 ) //예외를 처리해줄 블럭 { //예외 처리 } catch( ... 또다른 Exception 변수 ) //예외를 처리해줄 블럭 { //예외 처리 } catch( ... 또다른 Exception 변수 ) //예외를 처리해줄 블럭 { //예외 처리 } // ★최종적으로 예상되지 못한 예외를 처리해줄 블럭 // 반드시 모든 catch의 마지막에 위치해야 한다. catch( Exception 변수 ) { //예외 처리 } finally { //오류의 유무에 관계없이 반드시 처리/실행 해야하는 부분 //심지어 앞에서 return이 있어도 이 부분은 무조건 실행된다! ★exit는 예외! }
Exception 은 IOException과 RuntimeException 등으로 나뉜다.
try, catch 최소한 이 두개는 있어야 예외처리의 의미가 있다.
try, finally 만 있어도 문법적인 오류는 없지만, 오류 발생시 멈춘다. 즉 예외처리가 안된다.
② 던지는 방법
class ExceptionTest { //throws는 메소드의 사용자들에게 이런 오류가 발생할 수 있음을 알려주는 역할을 한다. public void exceptionThrows() throws ...Exception, ...Exception, ...Exception { //오류가 발생할 수 있는 일반적인 코드 } public void exceptionReceptor() //여기에도 throws를 넣어줄 수 있다. { //..... try { //exceptionTrhows 메소드에서 오류가 발생하면 //호출한 exceptionReceptor에서 예외를 받아오게 받아오게 되고, //여기에서 처리해주게 된다. this.exceptionTrhows(); } catch( Exception e ) { //예외 처리 } finally { //처리 } } public static void main( String [] args ) { //exceptionReceptor() 메소드 호출 ExceptionTest exceptionTest = new ExceptionTest(); exceptionTest.exceptionReceptor(); } }
아니면 모를 수 있으니까.
③ 예외를 강제로 발생시키기
임의로 예외를 발생시키고 싶을 때 사용하는 키워드는 throw 이다.
IOException e = new IOExecption(); // 예외 생성.... throw e; // 예외 발생! //혹은 한 문장으로.. throw new IOEXepction();