Java中的异常机制是一种处理程序在运行时可能发生的不可预测情况的方式。异常是指在程序执行期间遇到的错误或其他意外事件,它会中断程序的正常执行流程。
Las excepciones en Java se dividen en dos categorías: Excepción marcada (excepción marcada) y Excepción no marcada (excepción no marcada). Entre ellos, la excepción marcada debe capturarse y procesarse en el momento de la compilación, de lo contrario, el código no se puede compilar; mientras que la excepción no verificada no requiere procesamiento en el momento de la compilación, y puede elegir capturarla o lanzarla.
Las excepciones comunes en Java son las siguientes:
- NullPointerException (excepción de puntero nulo): lanzada cuando la aplicación intenta acceder a un objeto nulo.
Solución: evite usar referencias nulas o realice comprobaciones no nulas antes de usarlas.
Ejemplo de código:
String str = null;
// 不进行非空校验,会抛出NullPointerException
int length = str.length();
// 进行非空校验
if (str != null) {
int length = str.length();
}
- ArrayIndexOutOfBoundsException (excepción fuera de los límites de la matriz): se lanza cuando la aplicación intenta acceder a elementos que no existen en la matriz o acceder a elementos que exceden el rango de la matriz.
Solución: compruebe si el subíndice de la matriz está fuera de los límites o ajuste dinámicamente la longitud de la matriz.
Ejemplo de código:
int[] arr = {1, 2, 3};
// 当访问的下标大于等于数组长度时,会抛出ArrayIndexOutOfBoundsException
int value = arr[3];
- ClassCastException (excepción de conversión de clase): lanzada al intentar convertir un objeto a una clase a la que no pertenece.
Solución: evite usar objetos de tipo incorrectos para la conversión de tipo o realice una evaluación de tipo antes de la conversión.
Ejemplo de código:
Object obj = "hello";
// 非法的类型转换,会抛出ClassCastException
Integer num = (Integer) obj;
// 判断对象是否是正确的类型
if (obj instanceof String) {
String str = (String) obj;
}
- IllegalArgumentException (excepción de parámetro ilegal): se lanza cuando el parámetro entrante no se ajusta a la especificación del método.
Solución: compruebe si los parámetros se ajustan a la especificación del método y proporcione un mensaje de error claro.
Ejemplo de código:
public void doSomething(String param) {
// 参数为空,抛出IllegalArgumentException
if (param == null || param.length() == 0) {
throw new IllegalArgumentException("Invalid parameter: " + param);
}
// ...
}
- ArithmeticException (excepción aritmética): lanzada al intentar dividir por cero o tomar módulo.
Solución: Evite el divisor por cero o el módulo de módulo es cero, o realice un manejo especial para situaciones en las que puedan existir tales excepciones.
Ejemplo de código:
int a = 10;
int b = 0;
// 当除数为零时,会抛出ArithmeticException
int c = a / b;
int d = 10;
int e = 0;
// 对于除数为零的情况进行特殊处理
int f = (e == 0) ? 0 : d / e;
Al manejar excepciones, debemos elegir un método de manejo adecuado de acuerdo con los escenarios y necesidades comerciales específicos. Los métodos de procesamiento comunes incluyen la impresión de información de excepción, el registro de registros de excepción, la devolución de información de error o el reintento de ejecución, etc. Aquí hay un bloque de código de muestra:
try {
// 可能会抛出某些异常的代码
} catch (Exception e) {
// 打印异常信息
e.printStackTrace();
// 记录异常日志
logger.error("Some error happened", e);
// 返回错误信息
return ResponseEntity.badRequest().body("Some error happened");
// 重新尝试执行
// ...
}