Java 핵심 기술 볼륨 1 예외 처리 읽기 노트
이상 처리
Java 핵심 기술 볼륨 1에 대한 예외 처리 섹션 기록
1. 검사형 이상과 비검사형 이상
예외는 다음과 같습니다.
unchecked exception
통상적으로 RuntimeException
과Error
를 가리키는데 이 두 가지 이상은 던져질 필요가 없다.먼저 설명
RuntimeException
, 이러한 이상을 초래한 원인은 개발자 자체의 문제로 인해 완전히 피할 수 있기 때문이다.Error
만약에 프로그램에서 이런 이상이 발생하면 우리는 그에 대해 아무런 통제 능력이 없다. 포획하거나 던져도 이런 이상을 처리할 수 있는 이상 프로세서가 없다.checked execption
이런 이상은 흔히 예측할 수 없는 원인으로 인해 발생하고 보완할 기회가 있기 때문에 프로그램은 반드시 포획 처리하거나 호출자에게 이런 이상을 던져야 한다.2. 부자류의 방법 이상 성명
3. 사용자 정의 이상 클래스를 어떻게 실현합니까?
Exception
에서 비운행 시 이상 public class CustomException extends IOException {
public CustomException() {}
public CustomException(String msg) {
super(msg);
}
}
4. 이상을 잡을까, 위로 던질까?
프로그램은 자신이 처리할 수 있는 이상을 포착하고 자신이 처리할 수 없는 이상을 호출자에게 던져야 한다.
5. 여러 개의 이상 포착
ex.getMessage()
를 통해 이상 정보를 얻거나 ex.getClass().getName()
에 따라 이상 유형catch
자구에서 여러 개의 이상을 포획할 수 있으며, 전제 조건은 여러 개의 이상한 처리 동작이 일치하는 것try {
...
} catch(FileNotFoundException | UnknowHostException ex) {
...
}
6.catch 자구는 이상을 던질 수 있습니다
의문:catch 서브문장에서 이상을 던졌습니다. 방법 서명에 이상 정보를 표시하시겠습니까?
호출자에게 이상 대상을 던지는 방식을 포장기술이라고 한다.
포장 기술을 사용하다
호출자가 예외 개체를 내보냅니다.
try {
} catch(SQLException ex) {
Throwable se = new ServletException("database error");
se.initCause(ex);
throw se;
}
호출자가 원본 이상 정보를 가져오는 방법:
Throwable e = se.getCause();
왜 포장 기술을 사용합니까?
호출자는 Servlet에 문제가 있는지만 알고 싶기 때문에 (Servlet Exception을 던질지) 구체적인 세부 사항(SQLException)을 알고 싶지 않습니다.
포장 기술의 장점
고급 이상을 던지면 원시 이상 정보를 잃어버리지 않습니다.
7. finally 정보
try/catch try/finally
, 내외층try 단일비난InputStream in = ...;
try {
try {
//
} finally {
//
}
} catch(IOException ex) {
//
}
try-with-resource
은 이런 문제를 편리하게 해결할 수 있다.8. try-with-resource
어떻게 사용합니까
전제: 리소스 구현
AutoCloseable
인터페이스 또는 Closeable
인터페이스구문:
try (InputStream in = ...) {
...
}
try 블록의 내용을 실행하면 자원을 자동으로 호출하는close 방법
여러 리소스를 지정할 수 있음
;
어떻게try가 ex를 던지고finally가 ex를 던지는 문제를 처리합니까?
원래의 ex를 다시 던지면close 방법에서 던진 이상이 억제됩니다.
호출자는
ex.getSuppressed()
를 호출하여 ex 목록을 얻을 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.