[Java] Uso de aserciones en el manejo de excepciones

usar aserción

asertar( Assertion) es una forma de depurar un programa. En Java, use assertpalabras clave para implementar aserciones.

Veamos primero un ejemplo:

public static void main(String[] args) {
    
    
    double x = Math.abs(-123.45);
    assert x >= 0;
    System.out.println(x);
}

Una declaración assert x >= 0;es una aserción, y se espera que la condición de la aserción x >= 0 sea verdadera. Si se evalúa como falso, la aserción falla y se lanza AssertionError.

Al usar la declaración de aserción, también puede agregar un mensaje de aserción opcional:

assert x >= 0 : "x must >= 0";

De esta forma, cuando la aserción falla, ```AssertionError`` traerá el mensaje x must >= 0, que es más conveniente para la depuración.

La característica de la aserción de Java es: cuando la aserción falla, se lanzará AssertionError, lo que hará que el programa finalice y se cierre. Por lo tanto, las aserciones no se pueden usar para errores de programación recuperables y solo se deben usar durante el desarrollo y las pruebas.

Las aserciones no deben usarse para errores de programación recuperables. Por ejemplo:

void sort(int[] arr) {
    
    
    assert arr != null;
}

La excepción debe lanzarse y capturarse en la capa superior:

void sort(int[] arr) {
    
    
    if (arr == null) {
    
    
        throw new IllegalArgumentException("array cannot be null");
    }
}

Cuando usamos afirmar en un programa, por ejemplo, una afirmación simple:

// assert
public class Main {
    
    
    public static void main(String[] args) {
    
    
        int x = -1;
        assert x > 0;
        System.out.println(x);
    }
}

Afirme que x debe ser mayor que 0, de hecho x es -1, la afirmación definitivamente falla. Ejecute el código anterior y descubra que el programa no arrojó AssertionError, pero imprimió el valor de x normalmente.

¿Cómo es este cuatro gordo? ¿Por qué no funciona la declaración de afirmación?

Esto se debe a que JVMla instrucción de afirmación está desactivada de forma predeterminada, es decir, la declaración de afirmación se ignora automáticamente y no se ejecuta.

Para ejecutar una declaración de aserción, debe pasar el parámetro -enableassertions` (abreviado como -ea) a la máquina virtual Java para habilitar las aserciones. Por lo tanto, el programa anterior debe ejecutarse en la línea de comando para que sea efectivo:

$ java -ea Main.java
Exception in thread "main" java.lang.AssertionError
	at Main.main(Main.java:5)

También puede habilitar aserciones de forma selectiva para clases específicas. El parámetro de la línea de comando es: , lo que significa que solo habilita aserciones -ea:com.itranswarp.sample.Mainpara esta clase.com.itranswarp.sample.Main

O habilite la aserción para un paquete específico, el parámetro de la línea de comando es: -ea:com.itranswarp.sample...(tenga en cuenta que hay 3 al final), lo que significa com.itranswarp.samplehabilitar la aserción para este paquete.

En el desarrollo real, las afirmaciones rara vez se utilizan. Una mejor manera es escribir pruebas unitarias, y explicaremos el uso de JUnit más adelante.

resumen

La aserción es una forma de depuración. Se producirá un error de aserción AssertionError, y la aserción solo se puede habilitar en la fase de desarrollo y prueba;

Los errores recuperables no se pueden afirmar, pero se deben lanzar excepciones;

Las aserciones rara vez se usan, un mejor enfoque es escribir pruebas unitarias.

Si ha ganado algo después de leer, también puede unirse a la discusión en la comunidad Knowledge Planet:

Supongo que te gusta

Origin blog.csdn.net/ihero/article/details/132190132
Recomendado
Clasificación