Java 사용을 시도하고 잡아 <br /> Java 런타임 시스템에서 제공하는 기본 예외 핸들러는 디버깅에 유용하지만 일반적으로 예외를 직접 처리하려고합니다. 이를 수행하는 데 두 가지 이점이 있습니다. 먼저 오류를 수정할 수 있습니다. 둘째, 프로그램이 자동으로 종료되는 것을 방지합니다. 대부분의 사용자는 프로그램이 종료 될 때와 오류가 발생할 때마다 스택 트랙 인쇄에 대해 화를 내고 있습니다. 다행히도 피하기 쉽습니다.
런타임 오류를 방지하고 처리하려면 모니터링하려는 코드를 시도 블록에 넣으면됩니다. CATH 조항을 포함하여 시도 블록을 따라 잡으려는 오류 유형을 지정합니다. 이 작업을 완료하는 것은 매우 간단합니다. 다음 프로그램에는 Try Block과 Catch Clause가 포함되어 있습니다.
클래스 exc2 {public static void main (string args []) {int d = 0; printed. ");} catch (arithmeticexception e) {// catch divide-by-zero error system.out.println ("division by zero. ");} system.out.println ("c atch 문의 이후 "). }} 프로그램은 다음과 같이 출력합니다.
Zero. 이후의 명령문.
시도 블록에서 println ()에 대한 호출은 결코 실행되지 않습니다. 예외가 제기되면 프로그램 컨트롤은 시도 블록에서 캐치 블록으로 전송됩니다. 실행은 캐치 블록에서 시도 블록으로 "반환"하지 않습니다. 그래서“이것은 인쇄되지 않을 것입니다.”
표시되지 않습니다. 캐치 문이 실행되면 프로그램 제어는 전체 시도/캐치 메커니즘의 다음 줄에서 계속됩니다.
시도와 캐치 문은 단위를 형성합니다. 캐치 절의 범위는 시도 문 앞에 정의 된 명령문으로 제한됩니다. 캐치 문은 다른 시도 문으로 제기 된 예외를 포착 할 수 없습니다 (중첩 된 시도 문장이 아닌 한).
시도에 의해 보호 된 진술은 브레이스 내에 있어야합니다 (즉, 블록에 있어야합니다). 혼자 시도를 사용할 수 없습니다.
캐치 절을 구성하는 목적은 예외를 해결하고 오류가 발생하지 않은 것처럼 계속 실행하는 것입니다. 예를 들어, 다음 프로그램에서, 각각의 루프에 대한 각각의 무작위 정수를 얻기 위해 반복됩니다. 이 두 정수는 각각 다른 당사자로 나뉘며 결과는 12345를 나누는 데 사용됩니다. 최종 결과는 a. 분할 작업이 제로 디비전 오류를 초래하면 캡처되고 A의 값이 0으로 설정되고 프로그램이 계속 실행됩니다.
// 예외를 처리하고 이동합니다. int i = 0; i <32000; {System.out.println ( "Zero.");예외 설명을 표시하십시오
Throwable Overload ToString () 메소드 (Object에 의해 정의 됨)를 과부하 시키므로 예외 설명이 포함 된 문자열을 반환합니다. println ()의 예외에 매개 변수를 전달하여 예외에 대한 설명을 표시 할 수 있습니다. 예를 들어, 이전 프로그램의 캐치 블록은
CATCH (ArithMeticexception e) {System.out.println (예외 : " + e; 이 버전이 원래 프로그램의 버전을 대체하면 프로그램은 표준 javajdk 인터프리터에서 실행되며 각 오류는 0으로 나눈 값이 다음 메시지를 표시합니다.
예외 : java.lang.arithmeticexception : / by zero
컨텍스트에는 특별한 값이 없지만 예외 설명을 표시하는 기능은 다른 경우에 특히 예외를 실험하고 디버깅 할 때 가치가 있습니다.
Java 다중 캐치 문 <br />의 사용 경우에 따라 단일 코드 세그먼트에 의해 여러 예외가 발생할 수 있습니다. 이 상황을 처리하기 위해 둘 이상의 캐치 조항을 정의 할 수 있으며, 각 조항은 한 가지 유형을 제외하고는 포착합니다. 예외가 제기되면 각 캐치 조항은 순서대로 확인되며 예외 유형과 일치하는 첫 번째 조항이 실행됩니다. 캐치 문이 실행되면 다른 조항이 우회되고 시도/캐치 블록 이후 코드에서 실행이 계속됩니다. 다음 예제는 두 가지 예외 유형을 설계합니다.
// 여러 catch 문을 보여줍니다. class multicatch {public static void main (String args []) {int a = args.length.out.println ( "a =" + a); int c [] = {1}; out .println ( "array index oob :" + e)} println;프로그램은 명령 줄 매개 변수없이 시작 조건에서 실행되어 a가 0이기 때문에 제로화 된 예외를 초래합니다. 명령 줄 매개 변수를 제공하면 생존하여 a를 0보다 큰 값으로 설정합니다. 그러나 정수 배열 C의 길이가 1이고 프로그램은 C [42]에 값을 할당하려고하기 때문에 arrayindExoutof boundsexception 예외를 유발합니다.
다음은 두 가지 다른 상황에서 실행되는 프로그램의 출력입니다.
C :/> java multicatcha = 0divide by 0 : java.lang.arithmeticexception :/try/catch blocks.c :/> java multicatch testarga = 1ARRAY INDEX OOB : J AVA.LANG.ARRAYINDEXOUTOFBOUNDSEXCELCE
다중 캐치 문을 사용하는 경우 부모 클래스 전에 예외 서브 클래스를 사용해야한다는 점을 기억하는 것이 중요합니다. 부모 클래스의 캐치 문을 사용하면 유형 및 모든 서브 클래스 유형에 대한 예외가 발생하기 때문입니다. 이런 식으로, 서브 클래스가 부모 클래스 뒤에 있으면 서브 클래스는 결코 도착하지 않습니다. 또한 Java에서 도달 할 수없는 코드는 오류입니다. 예를 들어 다음 절차를 고려하십시오.
/*이 프로그램에는 오류가 포함되어 있습니다. 서브 클래스는 일련의 캐치 문서에서 슈퍼 클래스 앞에 나와야합니다. args []) {int a = 0; Rithmeticexception은 예외의 서브 클래스입니다.프로그램을 컴파일하려고하면 예외가 잡히면 두 번째 캐치 문이 도착하지 않는다는 오류 메시지가 표시됩니다. ArithMeticeXception은 예외의 서브 클래스이므로 첫 번째 Catch 문은 ArithMeticeXception을 포함한 모든 예외 지향 오류를 처리합니다. 이것은 두 번째 캐치 문이 결코 실행되지 않음을 의미합니다. 프로그램을 수정하려면 두 캐치 문의 순서를 반전하십시오.