예외가하는 이벤트를 실행하는 동안 발생하는 프로그램, 정상적인 흐름을 방해하는 프로그램의 지시를합니다.
예외 사항에 대한 세부 사항을 제공합니다 별도의 수단을 무언 명 중 무엇을해야하면 일반적인 문제가 발생하는 프로그램의 기본 논리입니다. 의 전통 프로그래밍, 오류 감지,보고 및 처리를 자주 리드를 혼동 스파게티 코드가있습니다. 예를 들어, 의사를 고려하는 방법을 여기에서 읽는 경우 전체 파일을 메모리 :
readfile (
파일을 엽니다;
그 크기를 결정합니다;
많은 메모리를 할당하는;
파일을 읽을 메모리로;
파일을 닫습니다;
)
처음 눈에,이 기능을 보인다 단순 충분하지만, 다음과 같은 잠재적인 오류를 모두 무시합니다 :
|
|
•이 파일을 열 수 없다면 어떻게됩니까?
• 어떤 일이 발생하면 해당 파일의 길이 될 수없습니다 결정됩니까?
• 충분한 메모리 수 없다면 어떻게됩니까 할당된가?
• 읽기에 실패하면 어떻게됩니까?
• 파일을 수 없다면 어떻게됩니까 폐쇄가?
를 처리하기 위해이 같은 경우에 readfile 기능이 있어야 더 많은 코드를 필요가 오류를 감지,보고 및 처리를합니다. 다음은 무엇을하는 기능과 같이의 예입니다 :
errorcodetype readfile (
초기화 errorcode = 0;
파일을 엽니다;
만약 (thefileisopen) (
이 파일의 길이를 결정합니다;
만약 (gotthefilelength) (
많은 메모리를 할당하는;
만약 (gotenoughmemory) (
파일을 읽을 메모리로;
만약 (readfailed) (
errorcode = -1;
)
) 다른 사람 (
errorcode = -2;
)
) 다른 사람 (
errorcode = -3;
)
파일을 닫습니다;
만약 (thefiledidntclose & & errorcode == 0) (
errorcode = -4;
) 다른 사람 (
errorcode = errorcode 및 -4;
)
) 다른 사람 (
errorcode = -5;
)
돌아 errorcode;
)
거기의 너무나 많은 오류를 감지,보고 및 재방 여기는 원래 일곱 줄의 코드가 손실의 번잡합니다. 더 나쁜 아직은 논리적 흐름의 코드는 또한 총 분실, 따라서을 어렵게 코드가 수행하고 있는지 여부를 알 권리가 지 :는 파일을 정말로되고 폐쇄된 경우에 함수가 실패를 할당할 충분한 메모리가? 을 보장하는 것이 더욱 어렵게 할 수있는 권리의 코드를 계속 수정하는 방법을 3 개월 후에 생각하면 쓰는 것이있습니다. 많은 프로그래머가이 문제를 해결할 자신의 프로그램이 충돌하면 간단히 무시하고 iterrors가보고합니다.
예외를 사용하면 귀하의 코드를 작성의 주요 흐름과를 처리하는 예외적인 경우가 다른 곳에있습니다. readfile 함수가 사용되는 경우에는 예외를 대신 전통 오류 - 경영 기법,이를 다음과 같은 모양 알아보기 :
readfile (
시도 (
파일을 엽니다;
그 크기를 결정합니다;
많은 메모리를 할당하는;
파일을 읽을 메모리로;
파일을 닫습니다;
) 잡아 (fileopenfailed) (
dosomething;
) 잡아 (sizedeterminationfailed) (
dosomething;
) 잡아 (memoryallocationfailed) (
dosomething;
) 잡아 (readfailed) (
dosomething;
) 잡아 (fileclosefailed) (
dosomething;
)
)
이 예외를 예비하면 노력의 일을하지 마십시오 작업이 감지,보고 및 처리 오류, 그러나 그들의 작품을보다 효율적으로 정리할 필요가 도움이됩니다.
두 번째 장점은 예외입니다 능력을 전파 오류보고를 호출 스택의 방법입니다. 시다는 readfile 방법은 네 번째 방법에 의한 일련의 중첩 메서드 호출의 주요 프로그램 : method1 통화 method2, 어떤 통화 method3하고있는 마지막 통화 readfile :
method1 (
전화를 method2;
)
method2 (
전화를 method3;
)
method3 (
전화를 readfile;
)
정해도가 method1는 유일한 방법에 관심이있는 오류가 발생할 수있습니다 이내 readfile. 전통 오류 - 알림 기법을 강제 method2 및 method3를 전파할의 오류 코드를 반환하는 readfile을 호출 스택 전까지는 오류 코드가 마침내 도달 method1the 유일한 방법은 관심이있는 그들 :
method1 (
errorcodetype 오류;
오류 = 통화 method2;
만약 (오류)
doerrorprocessing;
기타
진행;
)
errorcodetype method2 (
errorcodetype 오류;
오류 = 통화 method3;
만약 (오류)
돌아 오류;
기타
진행;
)
errorcodetype method3 (
errorcodetype 오류;
오류 = 통화 readfile;
만약 (오류)
돌아 오류;
기타
진행;
)
리콜하는 자바 런타임 환경을 검색을 통해 뒤로 호출 스택를 찾을 수있는 방법에 관심이있는 특정 예외를 처리합니다. 오리 이내에 어떠한 예외를 던질 수있는 방법이되므로 더 멀리까지 허용하는 방법에 대한 호출 스택을 잡는 것이있습니다. 따라서 오류에 대한 배려에만있는 방법에 대해 걱정이 감지 오류 :
method1 (
시도 (
전화를 method2;
) 잡아 (예외 동) (
doerrorprocessing;
)
)
method2 던진다 예외 (
전화를 method3;
)
method3 던진다 예외 (
전화를 readfile;
)
그러나으로 의사를 표시, 더킹 일부의 노력에 대한 예외가 필요합니다 부분을 생략 방법입니다. 어떤 검사를 예외 내에있는 방법을 던질 수있는가를 지정해야합니다 조항의 던진다.
예외가 발생하기 때문에 모든 이내에 프로그램이 개체를 그룹화하거나 분류의 예외는 자연적인 결과에 클래스 계층 구조입니다. 의 한 예입 그룹의 관련 예외 클래스에 자바 플랫폼은 이들에 정의된 java.ioioexception과 그 자손입니다. ioexception이가 장 일반 및 나타냅니다을 수행할 때 발생할 수있는 모든 종류의 오류가 나는 / o. 그 후손을 진술보다 구체적인 오류가있습니다. 예를 들어, filenotfoundexception 뜻입니다 디스크에서 파일을 찾을 수없습니다.
쓸 수있는 방법이 매우 구체적인 예외를 처리할 수있는 구체적인 처리기입니다. 가 filenotfoundexception 수업이없는 후손, 그래서 다음과 같은 처리기를 처리할 수있습니다 오직 한 종류의 예외 :
잡을 (filenotfoundexception 동) (
...
)
예외를 잡을 수있는 방법을 기준으로 그룹이나 일반적인 유형 중 하나를 지정하여 예외의 superclasses를 잡을 진술합니다. 예를 들어,를 잡는 모든 내 / o 예외없이, 그들의 구체적인 유형, 예외 처리기를 지정 an ioexception 인수 :
잡을 (ioexception 동) (
...
)
이 처리기를 잡을 수있게된다 모든 내 / o 예외를 비롯한 filenotfoundexception, eofexception 등입니다. 에 대한 세부 정보를 찾을 수있습니다 쿼리하여 어떤 일이 발생에 대한 인수 예외 처리기에 전달됩니다. 예를 들어, 다음을 사용합니다를 인쇄하려면 스택 추적 :
잡을 (ioexception 동) (
e.printstacktrace (); / / 출력 상태를 system.err.
e.printstacktrace (system.out); / / 보내 추적을 stdout.
)
예외 처리기를 설정할 수있습니다까지 어떠한 예외로 처리하는 처리기 위치 :
잡을 (예외 동) (/ / (너무) 일반 예외 처리기
...
)
예외 클래스는 측근의 상단에 throwable 클래스 계층 구조입니다. 따라서이 처리기는 잡아 많은 다른 예외 외에도 이러한있는 처리기는 의도로 잡을. 예외를 처리하도록 할 수있습니다 이런 방식의 프로그램을 원하는 모든 작업을 수행되면, 예를 들어,이 프린트가 오류 메시지에 대한 사용자와 다음 종료됩니다.
대부분의 경우, 그러나, 원하는 예외 핸들러를가능한 한 구체적으로합니다. 그 이유는 먼저 핸들러가해야 할가를 확인하기 전에 어떤 종류의 예외가 발생했습니다가 장 복구 전략을 결정할 수있습니다. 의 효과를 통해 구체적인 오류를 잡는 없다는 처리기 모든가 능성을 수용해야합니다. 예외 핸들러가 너무 일반적인 수 있도록 코드가 더 많은 오류 - 0.64.3을 잡는 및 처리 예외가 예상되지 않은 프로그래머가하고있는 처리기에 의해 의도되지 않았다.
바와 같이 만들 수있습니다 그룹의 예외 및 처리 예외는 일반적인 패션, 또는 특정 예외 유형을 사용할 수있습니다 차별화에 대한 예외에 대한 예외 및 처리를 완전 패션입니다.
Online: 665 users browsing the articles directory
|
|