예외(Exception) 와 에러(Err), 예외처리, try ~ catch ~ finally, thorws, throw

2019. 3. 18. 20:26JAVA

----------------------------------에러와 예외-------------------------------------------------------------


에러 (Error)

에러란 컴퓨터 하드웨어의 오작동 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것


에러 발생 이유

하드웨어 장애

시스템 장애

JVM 장애




예외 (Exceoption)

예외란사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램오류

예외가 발생됐다(X) - 예외를 던져졌다(O) Throwable


예외가 발생하는 이유

사용자의 잘못된 조작

개발자의 잘못된 코딩



일반예외와 실행예외


일반예외

Exception의 자식 클래스들

사용자의 잘못된 조작

컴파일시 체크(예외처리 여부)<- 방어적 코딩


실행예외

RunTimeException및 상속받은 자식 클래스들

개발자의 잘못된 코딩

컴파일시시에 체크하지 않음



예외 처리란

예외가가 발생하더라도 코드가 중단되지 않게 하는것을 예외처리라고 한다.


try ~ catch ~ finally 블록을 사용한다.


try {

예외발생이 예상되는 수행문;

예외발생이 예상되는 수행문. ---- 1 

} catch (예외클래스타입 변수) {

예외발생시 실행할 수행문;

예외발생시 실행할 수행문 ---- 2

} finally {

예외발생과 상관없이 항상 실행할 수행문;

예외발생과 상관없이 항상 실행할 수행문. ---- 3

}


예외 발생시 : 1 -> 2 -> 3

예외 미발생시 : 1 -> 3


작성예)

try ~ catch

try {

} catch (예외클래스타입 변수) {

}


try ~ finally

try {


} finally {


}


try ~ catch ~ catch

try {


} catch (예외클래스타입 변수) {


} catch (예외클래스타입 변수) {


}





예외 떠넘기기(예외의 위임)

throws를 이용한 예외떠넘기기(예외처리 위임)


<기본 예외처리>

public void 메소드() {

try {

예외발생이 예상되는 수행문;

} catch (예외클래스타입 변수) {

// 발생된 오루(예외)정보를 로그파일로 기록하는 수행문; logger.error(e);

// 발생된 예외는 가로채고, 사용자정의 예외를 대신 발생시키는 수행문;

} finally {


}

}



<예외 떠넘기기(예외의 위임)>

public void 메소드() throws 예외클래스1, 예외클래스2, ..... {


예외클래스 1의 발생이 예상되는 수행문;

예외클래스 2의 발생이 예상되는 수행문;

}






예시)



try ~ catch를 할경우 대부분 아래처럼 한다.




--throw와 throws--


throw는 catch에서 예외를 잡는것을 가로채서 메소드에 정의된 throws쪽으로 예외를 던져버린다.


사용예





java.lang.Throwable

getMessage()

예외의 메시지를 발생하는 메소드, 문자열을 반환


printStackTrace(PrintWriter s)

예외가 발생한 코드를 실행 순서대로 화면에 출력