Java에서 비정상적으로 처리된try와catch 코드 블록 사용
Java가 실행될 때 시스템이 제공하는 기본 이상 처리 프로그램은 디버깅에 매우 유용하지만, 보통 이상을 처리하기를 원합니다.이렇게 하면 두 가지 좋은 점이 있다.첫째, 그것은 네가 잘못을 수정할 수 있도록 허락한다.둘째, 프로그램이 자동으로 종료되는 것을 방지한다.대부분의 사용자들은 프로그램이 실행을 중지하고 언제 오류가 발생하든지 창고 궤적을 인쇄하는 것에 대해 매우 괴로워한다. (적어도 이렇게 말할 수 있다.)다행히도 이것은 피하기 쉽다.
실행 중 오류를 방지하고 처리하기 위해서, 당신이 감시할 코드를try 블록에 넣으면 됩니다.try 블록을 따라가면 포획하고 싶은 오류 형식을 설명하는catch 자구를 포함합니다.이 작업을 완성하는 것은 매우 간단합니다. 다음 프로그램은 0이 제거되어 발생하는 Arithmeticexception 이상한try 블록과catch 자구를 처리합니다.
class Exc2 {
  public static void main(String args[]) {
    int d, a;
    try { // monitor a block of code.
      d = 0;
      a = 42 / d;
      System.out.println("This will not be printed.");
    } catch (ArithmeticException e) { // catch divide-by-zero error
      System.out.println("Division by zero.");
    }
    System.out.println("After catch statement.");
  }
}
Division by zero.
After catch statement.표시되지 않습니다.일단catch 문장을 실행하면 프로그램 제어는 전체try/catch 메커니즘의 다음 줄에서 계속됩니다.
try와catch 문장이 하나의 단원을 형성했다.catch 자구의 범위는try 문장 앞에 정의된 문장에 제한됩니다.하나의catch문장은 다른try성명이 일으키는 이상을 포착할 수 없습니다. (끼워넣은try문장이 아니라면)
try로 보호된 문장 성명은 반드시 하나의 대괄호 안에 있어야 한다.너는 단독으로try를 사용할 수 없다.
캐치 서브문장을 구성하는 목적은 이상 상황을 해결하고 오류가 발생하지 않은 것처럼 계속 실행하는 것이다.예를 들어 다음 프로그램에서 모든 for 순환의 반복은 두 개의 무작위 정수를 얻는다.이 두 정수는 각각 상대방에게 제거되었는데, 결과는 12345를 제거하는 데 쓰였다.마지막 결과는 a에 존재한다.만약 나눗셈 작업이 제로 오류를 초래한다면, 이것은 포착되고, a의 값은 0으로 설정되며, 프로그램은 계속 실행됩니다.
// Handle an exception and move on.
import java.util.Random;
class HandleError {
  public static void main(String args[]) {
    int a=0, b=0, c=0;
    Random r = new Random();
    for(int i=0; i<32000; i++) {
      try {
        b = r.nextInt();
        c = r.nextInt();
        a = 12345 / (b/c);
      } catch (ArithmeticException e) {
        System.out.println("Division by zero.");
        a = 0; // set a to zero and continue
      }
      System.out.println("a: " + a);
    }
  }
}
Throwable ToString () 메서드 (object에서 정의) 를 다시 불러오기 때문에 예외 설명을 포함하는 문자열을 되돌려줍니다.println () 에서 이상한 매개 변수를 보내서 이상한 설명을 표시할 수 있습니다.예를 들어 앞 프로그램의catch 블록은 다시 쓸 수 있습니다
catch (ArithmeticException e) {
  System.out.println("Exception: " + e);
  a = 0; // set a to zero and continue
}
  Exception: java.lang.ArithmeticException: / by zeroJava 다중catch 문장 사용
어떤 경우, 하나의 코드 세그먼트로 인해 여러 개의 이상을 일으킬 수 있다.이 상황을 처리하면 두 개 이상의catch 자구를 정의할 수 있습니다. 자구마다 하나의 유형의 이상을 포착할 수 있습니다.이상이 발생했을 때, 모든catch 자구가 순서대로 검사되고, 첫 번째 이상 유형과 일치하는 자구가 실행됩니다.하나의catch 문장이 실행된 후에 다른 서브문장은 옆길로 가고try/catch 블록 이후의 코드부터 실행됩니다.다음 예제에서는 두 가지 다른 예외 유형을 설계했습니다.
// Demonstrate multiple catch statements.
class MultiCatch {
  public static void main(String args[]) {
    try {
      int a = args.length;
      System.out.println("a = " + a);
      int b = 42 / a;
      int c[] = { 1 };
      c[42] = 99;
    } catch(ArithmeticException e) {
      System.out.println("Divide by 0: " + e);
    } catch(ArrayIndexOutOfBoundsException e) {
      System.out.println("Array index oob: " + e);
    }
    System.out.println("After try/catch blocks.");
  }
}
다음은 두 가지 다른 상황에서 실행되는 프로그램의 출력입니다.
C:\>java MultiCatch
a = 0
Divide by 0: java.lang.ArithmeticException: / by zero After try/catch blocks.
C:\>java MultiCatch TestArg
a = 1
Array index oob: java.lang.ArrayIndexOutOfBoundsException After try/catch blocks.
/* This program contains an error.
A subclass must come before its superclass in a series of catch statements. If not,unreachable code will be created and acompile-time error will result.
*/
class SuperSubCatch {
  public static void main(String args[]) {
    try {
      int a = 0;
      int b = 42 / a;
    } catch(Exception e) {
      System.out.println("Generic Exception catch.");
    }
    /* This catch is never reached because
    ArithmeticException is a subclass of Exception. */
    catch(ArithmeticException e) { // ERROR - unreachable
      System.out.println("This is never reached.");
    }
  }
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.