자바 이상 깊이 분석

5006 단어 Java 이상
자바 이상 은 두 가지 로 나 뉘 는데 Checked 이상 과 Runtime 이상,Checked 이상 은 모두 컴 파일 단계 에서 처리 할 수 있 는 이상 입 니 다.
Checked 이상 과 Runtime 이상 의 차이 와 관계
  • Checked 이상 은 모두 처리 할 수 있 는 이상 입 니 다.프로그램 에서 Checked 이상 을 명시 적 으로 처리 해 야 합 니 다.처리 하지 않 으 면 컴 파일 이 잘못 되 었 습 니 다.Runtime 이상 은 명시 적 으로 처리 되 지 않 을 수 있 습 니 다.
  • 모두 Exception 의 하위 클래스 로 Runtime Exception 을 계승 한 것 은 Runtime 이상 이 고,다른 것 은 Checked 이상 이다.
  • 흔 한 이상 류
    자주 실행 되 는 런 타임 예외 몇 가 지 를 열거 합 니 다.
  • IndexOutOfBoundException:배열 경계 이상;
  • NullPointer 예외:빈 포인터 이상;
  • ClassCastException:클래스 전환 이상;
  • NumberFormat 예외:디지털 형식 이상;
  • ArithmeticException:연산 이상.
  • 실행 되 지 않 을 때 이상(Checked 이상)을 열거 합 니 다.
  • SQLException:SQL 이상;
  • IOException:IO 이상;
  • FileNotFoundException:파일 에 이상 이 없습니다.IOException 의 하위 클래스 입 니 다.
  • Interrupted Exception:중단 이상,보통 다 중 스 레 드 프로 그래 밍 에 사 용 됩 니 다.
  • ClassNotFoundation Exception:클래스 를 찾 을 수 없습니다.
  • 오류
    Error 오 류 는 일반적으로 시스템 붕괴,가상 컴퓨터 오류,동적 링크 실패 등 가상 컴퓨터 와 관련 된 문 제 를 말 합 니 다.이러한 오 류 는 복구 되 지 않 거나 포착 되 지 않 아 프로그램 이 중단 될 수 있 습 니 다.일반적으로 프로그램 에서 도 이러한 오 류 를 처리 할 수 없 기 때문에 프로그램 에서 catch 를 사용 하여 Error 대상 을 캡 처 하려 고 시도 해 서 는 안 됩 니 다.방법 정의 시 throws Error 대상 이 필요 없습니다.
    Checked 이상 사용
    앞에서 Checked 는 반드시 명시 적 으로 처리 해 야 한다 고 언급 했 습 니 다.그렇지 않 으 면 컴 파일 오류 가 발생 했 습 니 다.예 를 들 어 파일 입력 흐름 을 설명 하 는 것 입 니 다.
    
    FileInputStream fis = new FileInputStream("test.md");
    이 코드 컴 파일 은 오 류 를 보고 할 수 있다.
    
    Unhandled exception type FileNotFoundException
    따라서 반드시 명시 적 으로 처리 해 야 합 니 다.Checked 이상 을 처리 하 는 방식 은 보통 두 가지 가 있 습 니 다.
    처리 방법 을 알 고 있다 면 try..catch..블록 처리:
    
    //Checked         
    try {
     FileInputStream fis = new FileInputStream("test.md");
    } catch (FileNotFoundException e) {
     e.printStackTrace();
     System.out.println("     !");
    }
    어떻게 처리 해 야 할 지 모 르 면 방법 에서 던 지고 상위 호출 자가 처리 합 니 다.
    
    public static void main(String[] args) throws FileNotFoundException {
    
     //Checked         
     // main       ,  JVM  ,JVM                 ,       
     FileInputStream fis = new FileInputStream("test.md");
    }
    throw 를 사용 하여 자동 으로 이상 던 지기
    어떤 때 는 업무 수요 에 따라 우 리 는 프로그램 에서 스스로 이상 을 던 집 니 다.예 를 들 어 읽 은 파일 내용 이 비어 있 으 면 우 리 는 이것 이 이상 이 라 고 생각 합 니 다.이때 우 리 는 throw 를 사용 하여 주동 적 으로 이상 을 던 지고 catch 로 캡 처 할 수 있 습 니 다.
    
    //  throw      
    try {
     FileInputStream fis = new FileInputStream("test.md");
     if(fis.read() == 0) {
      throw new IOException("   ");
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
    throw 가 runtime 이상 을 던 졌 다 면 프로그램 은 try..catch..로 캡 처 할 수도 있 고 신경 쓰 지 않 아 도 됩 니 다.
    이상 체인 처리
    실제 기업 급 응용 에서 우 리 는 밑바닥 의 이상 을 상부 응용 에 노출 시 키 지 않 는 다.예 를 들 어 SQL 이상 을 사용자 인터페이스 에 노출 시 키 지 않 는 다.하 나 는 사용자 에 게 SQL 이상 을 보 는 것 도 도움 이 되 지 않 는 다 는 것 이다.다른 하 나 는 악성 사용자 에 게 바 텀 이상 을 노출 하 는 것 이 안전 하지 않다 는 것 이다.
    그렇다면 어떻게 밑바닥 이상 을 차단 합 니까?일반적인 방법 은 프로그램 이 먼저 원시 적 인 이상 을 포착 한 다음 에 새로운 업무 이상 을 던 지 는 것 이다.새로운 업무 이상 은 사용자 에 대한 알림 정 보 를 포함 하고 이런 처리 방식 은 이상 번역 이 된다.사용 자 를 만 드 는 프로그램 이 바 텀 이상 을 차단 하 는 방법 을 보 여 줍 니 다.
    
    //     ,    
    public void createSubscriber(int subId) throws BusinessException {
     try {
      //       ......
    
     }catch(Exception e){
      //         ...
    
      //        
      throw new BusinessException("      ");
     }
    }
    프로그램 이 원 초적 인 이상 을 숨 기 고 필요 한 이상 알림 정보 만 제공 하면 바 텀 이상 이 표현 층 으로 확장 되 지 않도록 보장 할 수 있 습 니 다.이것 은 대상 의 패 키 징 원칙 에 완전히 부합 합 니 다.
    이러한 이상 을 포착 한 후에 다른 이상 을 던 지고 원시 이상 정 보 를 저장 하 는 것 은 전형 적 인 체인 처리 로 디자인 모델 에서 책임 체인 모델 이 라 고 불 린 다.
    이상 한 제안 몇 개 사용 하기
    우리 가 이상 을 사용 하 는 것 은 몇 가지 목 표를 실현 하기 위해 서 이다.
  • 프로그램 코드 의 혼란 을 최소 화 합 니 다.
  • 진단 정 보 를 캡 처 하고 보류 합 니 다.
  • 적당 한 인원 에 게 통지 합 니 다.
  • 적당 한 방식 으로 이상 활동 종료
  • 이러한 목표 에 대하 여 우 리 는 반드시 해 야 한다.
    1.과도 하 게 사용 하거나 의존 하지 마 세 요.매우 편리 하지만 정상 적 인 논리 처 리 를 모두 이상 처리 하지 마 세 요.예 를 들 어
    
    //    
    if(fileSize > 100){
     Sysotem.out.println("    ,     ");
     continue;
    }
    //       
    if(fileSize > 100){
     throw new Exception("    ,     ");
    }
    //   ,       。
  • try 에 많은 코드 를 쓰 지 마 세 요.그러면 이상 분석의 난이 도 를 증가 시 킬 수 있 고 대량의 코드 는 대량의 catch 를 통 해 서로 다른 이상 을 포착 해 야 할 수 있 습 니 다.
  • catch 를 사용 하여 모든 유형의 이상 을 캡 처 하 는 것 을 피한다.예 를 들 어 catch(Throwable t)나 catch(Exception e)와 같이 모든 이상 에 대해 똑 같은 논리 처 리 를 사용 하면 if 문 구 를 많이 써 서 서로 다른 상황 을 처리 해 야 한다.얻 는 것 보다 잃 는 것 이 많다.또한 이러한 캡 처 방식 은 Error,Runtime 등 프로그램 이 종 료 될 수 있 는 이상 캡 처 를 초래 하여 이상 을'억제'할 수 있다.일부 관건 적 인 이상 은 조용히 무시 당 할 수 있 습 니 다.
  • 포 획 된 이상 을 무시 하지 마 세 요.catch 는 유용 한 일 을 해 야 합 니 다.비어 있 거나 이상 만 인쇄 하지 마 세 요.catch 블록 이 비어 있 으 면 하늘 을 속 이 고 바 다 를 건 너 는 것 입 니 다.프로그램 에 오류 가 발생 했 습 니 다.모든 사람 이 이상 을 볼 수 없 지만 프로그램 이 고 장 났 을 수도 있 습 니 다!이상 을 잡 았 을 때 처리 하거나 새로운 이상 을 던 지 거나 위로 던 지 거나 적당 한 곳 에서 이상 을 처리 합 니 다.
  • 좋은 웹페이지 즐겨찾기