java
이 튜토리얼에서는 예제를 통해 Java에서 여러 예외를 처리하는 방법을 배웁니다.
Java 7 이전에는 코드 중복이 있더라도 다양한 유형의 예외에 대해 여러 예외 처리 코드를 작성해야 했습니다.
예를 들어보겠습니다.
class Main {
public static void main(String[] args) {
try {
int array[] = new int[10];
array[10] = 30 / 0;
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
}
출력
/ by zero
이 예에서는 두 가지 예외가 발생할 수 있습니다.
ArithmeticException
숫자를 0으로 나누려고 하기 때문입니다.ArrayIndexOutOfBoundsException
배열 범위가 0에서 9까지인 새로운 정수 배열을 선언했고 인덱스 10에 값을 할당하려고 하기 때문입니다.
catch
중복 코드를 차단합니다.
할당 연산자 =
의 연관성 오른쪽에서 왼쪽이므로 ArithmeticException
메시지
/ by 0
과 함께 먼저 발생합니다. .
Java SE 7 이상에서는 이제 단일 catch
에서 둘 이상의 예외 유형을 catch할 수 있습니다. 차단합니다.
catch
에서 처리할 수 있는 각 예외 유형 블록은 수직 막대 또는 파이프 |
를 사용하여 구분됩니다. .
구문은 다음과 같습니다.
try {
// code
} catch (ExceptionType1 | Exceptiontype2 ex) {
// catch block
}
class Main {
public static void main(String[] args) {
try {
int array[] = new int[10];
array[10] = 30 / 0;
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
}
출력
/ by zero
단일 catch
에서 여러 예외 잡기 블록은 코드 중복을 줄이고 효율성을 높입니다.
이 프로그램을 컴파일하는 동안 생성된 바이트코드는 catch
가 여러 개 있는 프로그램보다 작습니다. 코드 중복이 없으므로 차단됩니다.
참고: catch
인 경우 블록이 여러 예외를 처리하고 catch 매개변수는 암시적으로 final
입니다. . 이는 catch 매개변수에 값을 할당할 수 없음을 의미합니다.
단일 catch
에서 여러 예외를 잡을 때 블록, 규칙은 전문화로 일반화됩니다.
즉, catch
에 예외 계층이 있는 경우 블록을 사용하면 여러 특수 예외를 포착하는 대신 기본 예외만 포착할 수 있습니다.
예를 들어보겠습니다.
class Main {
public static void main(String[] args) {
try {
int array[] = new int[10];
array[10] = 30 / 0;
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
출력
/ by zero
우리는 모든 예외 클래스가 Exception
수업. 따라서 여러 개의 특수 예외를 잡는 대신 Exception
수업.
기본 예외 클래스가 이미 catch
에 지정된 경우 블록, 동일한 catch
에서 하위 예외 클래스를 사용하지 마십시오. 차단하다. 그렇지 않으면 컴파일 오류가 발생합니다.
예를 들어보겠습니다.
class Main {
public static void main(String[] args) {
try {
int array[] = new int[10];
array[10] = 30 / 0;
} catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
}
출력
Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing
이 예에서 ArithmeticException
및 ArrayIndexOutOfBoundsException
둘 다 Exception
의 하위 클래스입니다. 수업. 따라서 컴파일 오류가 발생합니다.
java
많은 사람들이 예외를 잘못된 방식으로 처리하는 것을 봅니다. 아마도 이것은 당신에게도 적용될 것입니다. 다음 상황이 익숙합니까? 코드를 작성하고 있지만 사용 중인 라이브러리에서 예외가 발생할 수 있다는 것을 알고 있습니다. 당신은 정확히 기억하지 못합니다. 이 시점에서 소위 catch-all 블록을 사용하고 재미있는 것을 계속하고 싶은 유혹이 있습니다. 목차 최악의 방법 모든 예외를 포착하는 좀 더 나은 방법 심각한 상황 당신이 처리할 수 있는 것을 잡아라 결론 최악의 방법 당신이 할 수 있는 최악의 일은 무엇이든 잡아
예외(또는 예외적인 이벤트)는 프로그램 실행 중에 발생하는 문제입니다. 예외가 발생한 경우 발생하면 프로그램의 정상적인 흐름이 중단되고 프로그램/응용 프로그램이 비정상적으로 종료되므로 권장하지 않으므로 이러한 예외를 처리해야 합니다. 예외는 여러 가지 이유로 발생할 수 있습니다. 다음은 예외가 발생하는 몇 가지 시나리오입니다. 사용자가 잘못된 데이터를 입력했습니다. 열어야 할 파일을 찾을 수 없습니다. 통신 도중 네트워크 연결이 끊겼거나 JVM의 메모리가 부족합니다. 이러한 예외 중 일부는 사용자 오류로 인해