모르는 것만 짧고 빠르게 정리한 노트입니다.
1.1 프로그램 오류
- 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
1.2 예외 클래스
: Exception 은 checked Exception 과 unchecked Exception 으로 나뉜다. unchecked Exception 은 보통 프로그래머의 실수에 의해 발생하고, checked Exception 은 어플리케이션 외적인 요인으로 발생한다.
1.3 메서드에 예외 선언하기
- main 에서도 예외가 처리되지 않으면, 프로그램이 종료된다.
1.9 자동 자원 반환 try with resources 문
try (FileInputStream fis = new FileInputStream("score.dat");
DataInputStream dis = new DataInputStream(fis)) { // python with 랑 같은 용도인듯
while(true) {
score = dis.readInt();
System.out.pringln(score);
sum += score;
}
} catch (EOFException e) {
System.out.println("점수의 총합은 " + sum + "입니다.");
} catch (IOException ie) {
ie.printStackTrace();
}
- 자동으로 close 를 호출한다. (finally 안에서 try catch 로 close 를 하는 것과 같은 형태)
- AutoCloseable 인터페이스를 구현해야한다.
- close 호출 시 에러가 나면, suppressed exception 을 출력한다. 에러는 한번에 하나만 호출할 수 있다. 따라서 close 는 finally 에서 가장 마지막에 에러가 나는 경우이므로, 가장 먼저 발생한 에러 안에 저장된다.
1.11 예외 되던지기
- finally 블럭 내에서도 return 을 사용하면, try 블럭이나 catch 블럭의 return문 다음에 수행된다.
1.12 연결된 예외
- 여러 예외를 하나의 큰 분류의 예외로 묶어서 다루기 위해 사용
- checked 예외를 unchecked 예외로 바꿀 때 사용
try {
startInstall(); // SpaceException 발생
copyFiles();
} catch (SpaceException e) {
InstallException id = new InstallException("설치 중 예외 발생")
ie.initCause(e);
throw id;
}
static void startInstall() throws SpaceException, MemoryException {
if (!enoughSpace())
throw new SpaceException("설치할 공간이 부족합니다.");
if (!enoughMemory())
throw new MemoryException("메모리가 부족합니다.");
}
static void startInstall() throws SpaceException {
if (!enoughSpace())
throw new SpaceException("설치할 공간이 부족합니다.");
if (!enoughMemory())
throw new RuntimeException(new MemoryException("메모리가 부족합니다."));
}
'Java > Java의 정석' 카테고리의 다른 글
[Java의 정석] 11. Collections Framework (0) | 2022.03.23 |
---|---|
[Java의 정석] 09. java.lang 패키지 (0) | 2022.03.17 |
[Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언 (0) | 2022.03.14 |
[Java의 정석] 07. 클래스 상속 & 인터페이스 상속 (0) | 2022.03.14 |
[Java의 정석] 06. 객체지향 프로그래밍 (0) | 2022.03.08 |