Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 파일을 읽을 수 없을때
- exception re-throwing
- 인텔리제이
- unchecked예외
- 스프링 mvc프로젝트가 안뜰때
- 자바클래스가 안보일때
- 예외처리
- arrays메서드
- 포트충돌
- mark directory as
- source root
- POST요청
- getMessage()
- 깃베쉬
- 설치에러
- 소스루트설정
- mvc project 생성
- throw e
- 사용자 정의 예외
- 색상에 따른 상태
- checked예외
- 예외발생
- 예외 발생
- 이클립스
- printStackTrace()
- 빨간파일
- 빨간폴더
- chained exception
- 멀티 catch 블럭
- 인텔리제이물음표파일
Archives
- Today
- Total
프로그래밍 스티치
finally블럭 본문
finally블럭
finally블럭은 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용됩니다.
try{
// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception e) {
// 예외처리를 위한 문장을 적는다.
} finally {
// 예외의 발생여부에 관계없이 항상 수행되어야 하는 문장들을 넣는다.
// finally블럭은 try-catch문의 맨 마지막에 위치해야 한다.
}
try-catch문의 끝에 선택적으로 덧붙여 사용가능! 위치는 반드시 마지막 블럭에 고정적이다.
try{
startInstall(); // 설치
copyFiles(); // 복사
deleteTempFiles(); // 임시파일 삭제
} catch (Exception e) {
e.printStackTrace();
deleteTempFiles();
}
위와 같이 반드시 수행되어야 하는 작업이 있으면 try문과 catch문 모두에 삽입하는 것보다는
try{
startInstall();
copyFiles();
} catch (Exception e) {
e.printStackTrace();
} finally {
deleteTempFiles();
}
이렇게 finally블럭을 추가해서 코드 중복을 제거해주는 편이 좋다!
사용자 정의 예외 만들기
기존의 정의된 예외 클래스 외에도 필요에 따라 프로그래머가 새로운 예외 클래스를 정의하여 사용할 수 있다.
예시를 통해 알아보자.
class MyException extends Exception {
MyException(String msg) { // 문자열을 매개변수로 받는 생성자 ( 필히 작성!! )
super(msg); // 조상인 Exception클래스의 생성자를 호출한다.
}
}
Exception클래스로부터 상속받아서 MyException클래스를 만들었다. 필요하다면, 멤버변수나 메서드를 추가할 수 있다.
이전의 코드를 조금 개선시켜보자
class MyException extends Exception {
// 에러 코드 값을 저장하기 위한 필드를 추가 했다.
private final int ERR_CODE; // 생성자를 통해 초기화 한다.
MyException(String msg, int errCode){ // 생성자
super(msg);
ERR_CODE = errCode;
}
MyException(String msg) { // 생성자
this(msg, 100); // ERR_CODE를 100(기본값)으로 초기화한다.
}
public int getErrCode() { // 에러 코드를 얻을 수 있는 메서드도 추가했다.
return ERR_CODE; // 이 메서드는 주로 getMessage()와 함께 사요ㅕㅇ될 것이다.
}
}
메시지 뿐만 아니라 에러코드 값도 저장할 수 있도록 ERR_CODE와 getMessage()를 MyException클래스의 멤버로 추가했다. 이렇게 함으로써 MyException이 발생했을 때, catch블럭에서 getMessage()와 getErrCode()를 사용해서 에러코드와 메시지를 모두 얻을 수 있습니다.
기존의 예외클래스는 주로 Exception을 상속받아서 'checked예외'로 작성하는 경우가 많았지만, 최근에는 코드의 복잡성을 줄이기 위해 예외 처리를 선택적으로 할 수 있는 RuntimeException을 상속받아서 작성하는 쪽으로 바뀌어 가고 있습니다!
'JAVA > 예외처리' 카테고리의 다른 글
예외 되던지기(exception re-throwing) (0) | 2022.02.11 |
---|---|
메서드에 예외 선언하기 (0) | 2022.02.08 |
예외 발생시키기 (0) | 2022.02.08 |
멀티 catch 블럭 (0) | 2022.02.08 |
try-catch문에서의 흐름 (0) | 2022.02.08 |