티스토리 뷰
[자바의 정석] Ch 8-1 프로그램 오류란? Ch 8-5 try-catch문에서의 흐름이란? Ch 8-7 printStackTrace()와 getMessage()란? Ch 8-11 메서드에 예외 선언하기란?
da_devel 2022. 6. 22. 22:55
🤔 프로그램 오류란?
✔ 컴파일 에러(compile-time error) : 컴파일 할 때 발생하는 에러
✔ 런타임 에러(runtime error) : 실행할 때 발생하는 에러 (프로그램 종료)
✔ 논리적 에러(logical error) : 작성 의도와 다르게 동작 (프로그램 종료 x)
🤔 예외처리의 정의와 목적
✔ 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
✔ 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
🤔 try-catch문에서의 흐름
✅ try 블럭 내에서 예외가 발생한 경우
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인
2. 일치하는 catch블럭을 찾게 되면,
그 catch블럭 내의 문장들을 수행하고
전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행
만일 일치하는 catch블럭을 찾지 못하면, 예외처리 안함.
✅ try 블럭 내에서 예외가 발생하지 않은 경우
1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속함.
다음의 출력결과를 예측해보라.
class Tes {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(0 / 0); // 예외발생!!
System.out.println(2);
} catch(ArithmeticException ae) {
System.out.println(3);
} // try-catch의 끝
System.out.println(4);
} // main 메서드의 끝
}
실행결과
✔ Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch 블럭)
🤔 printStackTrace()와 getMessage()란?
✅ printStackTrace() 란?
예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
✅ getMessage() 란?
발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
🤔 예외 발생시키기
코드를 보며 이해하자.
class Tes {
public static void main(String[] args) {
try {
Exception e = new Exception("고의로 발생시켰음.");
throw e; // 예외를 발생시킴
// throw new Exception("고의로 발생시켰음."); // 위 두 줄을 한 줄로 작성
} catch(Exception e) {
System.out.println("에러 메시지 : " + e.getMessage());
e.printStackTrace();
}
System.out.println("프로그램이 정상 종료되었음.");
}
}
🤔 cheked 예외, unchecked 예외
✔ checked 예외 : 컴파일러가 예외 처리 여부를 체크(예외 처리 필수)
✔ unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외 처리 선택)
👉 Exception과 자손 : checked 예외 (try-catch 필수)
👉 RuntimeException과 자손 : unchecked 예외 (try-catch 선택)
✅ 예외 처리 방법
✔ try-catch문
✔ 예외 떠넘기기(알리기)
🤔 메서드에 예외 선언하기
import java.io.File;
class Tes {
public static void main(String[] args) {
try {
// File f = createFile(args[0]);
File f = createFile("test2.txt");
System.out.println(f.getName() + "파일이 성공적으로 생성되었습니다.");
} catch(Exception e) {
System.out.println(e.getMessage()+" 다시 입력해 주시기 바랍니다.");
}
}// main 메서드 끝
static File createFile(String fileName) throws Exception {
if(fileName==null || fileName.equals(""))
throw new Exception("파일이름이 유효하지 않습니다.");
File f = new File(fileName); // File 클래스의 객체를 만든다.
// File 객체의 crateNewFile 메서드를 이용해서 실제 파일을 생성한다.
f.createNewFile();
return f; // 생성된 객체의 참조를 반환한다.
} // createFile 메서드의 끝
} // 클래스의 끝
import java.io.File;
import java.io.IOException;
class Tes {
public static void main(String[] args) {
// File f = createFile(args[0]);
File f = createFile("");
System.out.println(f.getName() + "파일이 성공적으로 생성되었습니다.");
}// main 메서드의 끝
static File createFile(String fileName) { //throws exception {
try {
if (fileName == null || fileName.equals(""))
throw new Exception(("파일이름이 유효하지 않습니다."));
} catch (Exception e) {
fileName = "제목없음.txt";
}
File f = new File(fileName); //file클래스의 객체를 만든다.
// File 객체의 createNewFile 메서드를 이용해서 실제 파일을 생성한다.
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return f; // 생성된 객체의 참조를 반환한다.
} // createFile 메서드의 끝
}// 클래스의 끝
✅ finally 블럭 : 예외 발생여부와 관계없이 수행되어야 하는 코드를 가지는 블럭
오늘도 많은 것을 알게되었다.
내일 또 열심히 공부하자. 😆
'프로그래밍 > 자바' 카테고리의 다른 글
[자바의 정석] Ch11-1 컬레션 프레임웍(collections framework) / Ch 11-7 ArrayList (0) | 2022.06.27 |
---|---|
[자바의 정석] Ch8-17 예외 되던지기(exception re-throwing) / Ch8-18 연결된 예외(chained exception) (0) | 2022.06.27 |
[자바의 정석] 익명 클래스(anonymous class)란? (0) | 2022.06.22 |
[자바의 정석] Ch 7-24 내부 클래스의 제어자와 접근성이란? (0) | 2022.06.22 |
[자바의 정석] Ch 7-38 인터페이스를 이용한 다형성이란? 인터페이스의 장점은? Ch 7-40 디폴트 메서드와 static 메서드란? (0) | 2022.06.21 |
- Total
- Today
- Yesterday
- 백준
- 자바
- 개발자
- 소스코드
- LinkedList
- hackerrank
- stack
- 해커랭크 자바
- 자바의 정석
- ORM
- 해커랭크
- JPA
- 22 정보처리산업기사
- BAEKJOON
- 풀이
- 정보처리산업기사
- 해커랭크 자바 챌린지
- Java
- 그리디
- 정보처리 산업기사
- queue
- 정보처리산업기사 공부법
- 챌린지
- challenges
- 디버깅
- 코드
- 22 정보처리 산업기사
- hackerrank challenges
- 해커랭크 챌린지
- 강의
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |