Java 예외는 점검 예외 및 런타임 예외의 두 가지 범주로 나뉩니다. 확인 된 예외는 컴파일 단계에서 처리 할 수있는 예외입니다.
확인 된 예외와 런타임 예외의 차이와 연결
일반적인 예외 클래스
몇 가지 일반적인 런타임 예외를 나열합니다.
런타임이 아닌 몇 가지 예외를 나열합니다 (확인 된 예외) :
오류
오류는 일반적으로 시스템 충돌, 가상 머신 오류, 동적 링크 실패 등과 같은 가상 머신과 관련된 문제를 나타냅니다.이 오류는 복구 할 수 없거나 캡처 할 수 없으므로 응용 프로그램 중단을 유발할 수 없습니다. 일반적으로 응용 프로그램은 이러한 오류를 처리 할 수 없으므로 프로그램은 캐치를 사용하여 오류 객체를 포착하지 않아야합니다. 메소드를 정의 할 때 오류 객체를 던질 필요가 없습니다.
확인 된 예외 사용
앞에서 언급했듯이, 확인 된 것은 명시 적으로 처리되어야합니다. 그렇지 않으면 파일 입력 스트림 선언과 같은 컴파일 오류 가보고됩니다.
fileInputStream fis = new FileInputStream ( "test.md");
이 코드는 오류로 컴파일됩니다
처리되지 않은 예외 유형 filenotfoundException
따라서 명시 적으로 처리해야하며 일반적으로 확인 된 예외를 처리하는 두 가지 방법이 있습니다.
처리 방법을 알고 있다면 시도해 보는 것이 가장 좋습니다 ... 캐치 ... 블록 처리 :
// 확인 된 예외는 명시 적으로 처리해야합니다 {fileInputStream fis = new FileInputStream ( "test.md");} catch (filenotfoundException e) {e.printstacktrace (); System.out.println ( "파일이 존재하지 않습니다!");}처리 방법을 모르면 메소드에 던져서 이전 발신자가 처리하십시오.
public static void main (string [] args)은 filenotfoundException을 던지고 {// 점검 된 예외는 명시 적으로 처리되어야합니다. // 예외는 기본 메소드에서 던져져 처리를 위해 JVM에 전달됩니다. JVM의 예외를 처리하는 방법은 추적 스택 정보를 인쇄하고 FileInputStream FIS = New FileInputStream ( "test.md");}를 실행하는 프로그램을 종료하는 것입니다. 스스로 던지기 위해 던지기를 사용하십시오
때때로, 비즈니스 요구에 따라, 우리는 프로그램에 스스로 예외를 제외 할 것입니다. 예를 들어, 읽기 파일 컨텐츠가 비어 있으면 이것이 예외라고 생각합니다. 현재 우리는 Throw를 사용하여 예외를 적극적으로 던지고 잡을 수 있습니다.
// 제외를 적극적으로 던지기 위해 던지기를 사용하여 {fileInputStream fis = new FileInputStream ( "test.md"); if (fis.read () == 0) {Throw New IoException ( "빈 파일"); }} catch (ioexception e) {e.printstacktrace ();}Throw가 런타임 예외를 던지면 시도 시도 ... Catch ... 또는 무시할 수 있습니다.
예외 체인 처리
실제 엔터프라이즈 레벨 애플리케이션에서는 종종 사용자 인터페이스에 SQL 예외를 노출시키지 않는 것과 같이 기본 예외를 상위 수준의 응용 프로그램에 노출하지 않습니다. 첫째, 사용자의 경우 SQL 예외를 보는 것은 도움이되지 않으며, 둘째, 악의적 인 사용자의 경우 기본 예외를 노출시키는 것이 안전하지 않습니다.
그렇다면 기본 예외를 차단하는 방법은 무엇입니까? 일반적인 관행은 다음과 같습니다. 프로그램은 먼저 원래의 예외를 포착 한 다음 새로운 비즈니스 예외를 던집니다. 새로운 비즈니스 예외에는 사용자에게 신속한 정보가 포함되어 있습니다. 이러한 처리 방식은 예외 번역이됩니다. 다음은 사용자를 생성하는 프로그램이 기본 예외를 차단하는 방법을 보여줍니다.
// 예외 체인을 보여주고 사용자 공개 void CreateSubScriber (int subid)가 비즈니스 exception {// 사용자의 로직 생성 ...} catch (예외 e) {// 원래 예외를 프로세스하고 저장하는 새로운 비즈니스 예외를 던지기 ( "사용자 제작 실패"); }}프로그램이 원래 예외를 숨기고 필요한 예외 프롬프트 정보 만 위쪽으로 제공한다는 것을 알 수 있습니다. 이는 기본 예외가 프레젠테이션 계층으로 확장되지 않도록 할 수 있으며, 이는 객체의 캡슐화 원리와 완전히 일치합니다.
이러한 종류의 예외를 포착하고, 또 다른 예외를 던지고, 원래 예외 정보를 저장하는 것은 일반적인 체인 처리이며, 이는 설계 패턴의 책임 체인 패턴이라고합니다.
예외를 사용하기위한 몇 가지 제안
우리는 예외를 사용하여 몇 가지 목표를 달성합니다.
이러한 목표를 다루기 위해서는 다음과 같습니다.
1. 과도하게 사용하거나 의존하지 마십시오 : 예외는 매우 편리하지만 다음과 같은 정상 논리에 대한 예외 처리를 사용하지 마십시오.
// 원본 코드 if (filesize> 100) {sysotem.out.println ( "파일이 너무 커서 다시 업로드하십시오"); 계속;} // (filesize> 100) {throw new exception ( "파일이 너무 커서 다시 업로드하십시오");} //이 작업을 수행하는 것은 분명히 무책임합니다.