Java 올바른 오류 잡기 제스처

여기에 이미지 설명 삽입

이론적 개요

Java에서 예외를 포착하고 적절하게 처리하거나 던지는 것은 견고하고 안정적인 코드 작성의 핵심 부분입니다. 그러나 때로는 다양한 오류 캡처 방법에 대해 약간 모호하고 올바르게 사용하는 방법을 모를 수 있습니다. 여기에서 기본 지식을 검토하고 통합합니다! 올바른 개발 방법을 통해서만 효율성을 높이고 불필요한 실수와 우회를 줄일 수 있습니다! ! !
다음은 Java에서 예외를 적절하게 포착하고 처리하는 방법에 대한 몇 가지 지침입니다.

  1. 처리 방법을 알고 있는 예외만 포착: 모든 예외를 포착하는 대신 처리 방법을 알고 있는 예외만 포착합니다. 모든 예외를 포착하면 실제 문제를 숨기고 디버깅을 어렵게 만들 수 있습니다.

  2. 여러 catch 블록 사용: 여러 catch 블록을 사용하여 서로 다른 유형의 예외를 처리하여 개별적으로 처리되도록 합니다. 특정 예외가 일반 예외 catch 블록에 가려지지 않도록 특정 예외부터 일반 순으로 catch 블록을 배열합니다.

try {
    
    
    // 可能抛出异常的代码
} catch (SpecificException e) {
    
    
    // 处理特定异常
} catch (AnotherSpecificException e) {
    
    
    // 处理另一个特定异常
} catch (Exception e) {
    
    
    // 处理通用异常
}
  1. 예외 포착 후 계속 실행 여부: 상황에 따라 예외 포착 후 코드 실행을 계속할지 여부를 결정합니다. 경우에 따라 실행을 계속하기 전에 예외를 포착한 후 정리 작업을 수행해야 할 수 있습니다.

  2. finally 블록 사용: finally 블록을 사용하여 예외 발생 여부에 관계없이 리소스를 해제합니다. try 블록에서 예외가 발생하더라도 finally 블록의 코드는 항상 실행됩니다.

try {
    
    
    // 可能抛出异常的代码
} catch (Exception e) {
    
    
    // 处理异常
} finally {
    
    
    // 清理操作,例如关闭资源
}
  1. 사용자 지정 예외 발생: 경우에 따라 프로그램의 문제를 더 잘 나타내기 위해 사용자 지정 예외를 발생시켜야 할 수도 있습니다. Exception하위 클래스 또는 하위 클래스를 상속하는 사용자 지정 예외 클래스를 만듭니다 .
public class CustomException extends Exception {
    
    
    // 构造函数等
}
  1. 예외를 무시하지 마십시오. 단순히 예외를 삼키지 말고 후속 디버깅 및 문제 해결을 위해 예외 정보를 적절하게 기록하십시오.

  2. 로그 사용: 적절한 로깅 프레임워크(예: Log4j, SLF4J 등)를 사용하여 프로그램 실행 중에 예외를 포착하고 추적할 수 있도록 예외 정보를 기록합니다.

  3. 빈 catch 블록 방지: catch 블록에서 아무것도 하지 않는 것을 피하십시오. 그러면 진단하기 어려운 문제가 발생할 수 있습니다.

예시 데모

Java 코드를 작성할 때 다양한 일반적인 예외가 발생할 수 있습니다. 참조할 수 있는 몇 가지 일반적인 오류 캡처 예는 다음과 같습니다.

  1. NullPointerException(NullPointerException):
String str = null;
try {
    
    
    int length = str.length(); // 尝试调用null引用的方法
} catch (NullPointerException e) {
    
    
    System.out.println("空指针异常:" + e.getMessage());
}
  1. 범위를 벗어난 배열 인덱스 예외(ArrayIndexOutOfBoundsException):
int[] arr = {
    
    1, 2, 3};
try {
    
    
    int value = arr[5]; // 尝试访问数组超出索引范围的元素
} catch (ArrayIndexOutOfBoundsException e) {
    
    
    System.out.println("数组索引越界异常:" + e.getMessage());
}
  1. 유형 변환 예외(ClassCastException):
Object obj = "Hello";
try {
    
    
    Integer num = (Integer) obj; // 尝试将字符串转换为整数,但类型不匹配
} catch (ClassCastException e) {
    
    
    System.out.println("类型转换异常:" + e.getMessage());
}
  1. 0으로 나누기 예외(ArithmeticException):
int dividend = 10;
int divisor = 0;
try {
    
    
    int result = dividend / divisor; // 尝试进行除法运算,除数为零
} catch (ArithmeticException e) {
    
    
    System.out.println("除以零异常:" + e.getMessage());
}
  1. 파일 작업 예외(IOException):
try {
    
    
    FileInputStream file = new FileInputStream("nonexistent-file.txt"); // 尝试打开不存在的文件
} catch (IOException e) {
    
    
    System.out.println("文件操作异常:" + e.getMessage());
}
  1. 맞춤 예외:
class CustomException extends Exception {
    
    
    public CustomException(String message) {
    
    
        super(message);
    }
}

try {
    
    
    if (condition) {
    
    
        throw new CustomException("自定义异常信息");
    }
} catch (CustomException e) {
    
    
    System.out.println("自定义异常:" + e.getMessage());
}
  1. 여러 예외 잡기:
try {
    
    
    // 一些可能抛出异常的代码
} catch (NullPointerException e) {
    
    
    // 处理空指针异常
} catch (ArrayIndexOutOfBoundsException e) {
    
    
    // 处理数组索引越界异常
} catch (Exception e) {
    
    
    // 处理其他异常
}

이는 일반적인 오류 포착의 일부 예일 뿐이며 실제 응용 프로그램에서 훨씬 더 다양한 유형의 예외가 발생할 수 있습니다. 특정 비즈니스 논리 및 요구 사항에 따라 적절한 오류 캡처 방법을 선택하고 코드의 신뢰성과 안정성을 보장하기 위해 합리적으로 예외를 처리할 수 있습니다. 아무렇게나 예외를 던지거나 임의로 예외를 도입하지 마십시오. 자신과 다른 사람들이 디버깅에 어느 정도 어려움을 겪을 것입니다!

추천

출처blog.csdn.net/weixin_53742691/article/details/132214944