Java 핵심 기술 볼륨 1 예외 처리 읽기 노트

3183 단어

이상 처리


Java 핵심 기술 볼륨 1에 대한 예외 처리 섹션 기록

1. 검사형 이상과 비검사형 이상


예외는 다음과 같습니다.
  • checked exception
  • unchecked exception
  • unchecked exception통상적으로 RuntimeExceptionError를 가리키는데 이 두 가지 이상은 던져질 필요가 없다.
    먼저 설명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()에 따라 이상 유형
  • 을 얻는다
  • JDK7, 하나의 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 정보

  • catch 자구에서 이상이 발생하면 이 이상 대상은finally 자구를 실행한 후 호출자
  • 에게 던져집니다
  • try 자구는finally 자구만,catch 자구가 없습니다.이 경우 이상 대상은 호출자
  • 에게 던져진다
  • 사용 try/catch try/finally, 내외층try 단일비난
  • InputStream in = ...;
    try {
        try {
            //  
        } finally {
            //  
        }
    } catch(IOException ex) {
        //  
    }
    
  • finally 자구에 return이 포함되면finally 자구의 반환 값은 원시적인 반환 값을 덮어씁니다
  • finally 자문에서 자원을 방출할 때 이상 대상을 던지면 원시적인 이상 대상은 잃어버리고close 방법으로 발생한 이상 대상을 던진다.이런 문제의 처리 방식은 비교적 복잡하기 때문에 JDK7에서 제공한 try-with-resource 은 이런 문제를 편리하게 해결할 수 있다.

  • 8. try-with-resource


    어떻게 사용합니까


    전제: 리소스 구현AutoCloseable 인터페이스 또는 Closeable 인터페이스
    구문:
    try (InputStream in = ...) {
        ...
    }
    

    try 블록의 내용을 실행하면 자원을 자동으로 호출하는close 방법
    여러 리소스를 지정할 수 있음;

    어떻게try가 ex를 던지고finally가 ex를 던지는 문제를 처리합니까?


    원래의 ex를 다시 던지면close 방법에서 던진 이상이 억제됩니다.
    호출자는 ex.getSuppressed() 를 호출하여 ex 목록을 얻을 수 있습니다.

    좋은 웹페이지 즐겨찾기