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의 메모리가 부족합니다. 이러한 예외 중 일부는 사용자 오류로 인해