Boring serie - te enseña cómo manejar correctamente excepciones

En el trabajo, a menudo se encuentran situaciones de manejo caos Excepción:

  1. De cualquier excepciones golondrina, no se imprimen cualquier registro;
  2. Cuando cualquiera de registro, nivel de registro es erróneo, o para matar importante información de la pila de errores, haciendo la solución de problemas de producción, simplemente te hace volver loco.

Tengo este blog, es también un registro de componentes de código abierto, K anormal por su cuenta, porque yo pasé un largo tiempo de resolución de problemas - https://www.cnblogs.com/chongsha/p/11931109.html

Aquí se utiliza una pieza de código 1 tomado como ejemplo, el código es informal búsqueda de Internet, el autor original no se ofenda.

1   / * 
2     * cifrado
 3     * 1. configurado generador de clave
 4     * Los ecnodeRules reglas de inicialización generador de claves
 5     * 3. Generar clave
 6     * 4. crear e inicializar el aleatorizador
 7     * El cifrado del contenido
 8     * 6. retorno de la cadena
 . 9     * / 
10      pública  estática cadena AESEncode (cadena encodeRules, cadena de contenido) {
 . 11          el try {
 12 se              // 1. generador de claves configurado, designado como el algoritmo AES insensibles 
13 es              el KeyGenerator keygen = la KeyGenerator .getInstance ( "el AES" );
 14              // 2. los ecnodeRules reglas de inicialización generador de clave
 15              // genera a-128 bit fuente aleatoria, basado en la matriz de bytes entrante 
16             keygen.init (128, nuevo nuevo un SecureRandom (encodeRules.getBytes ()));
 . 17                // 3. clave simétrica para generar el original 
18 es              un SecretKey original_key = keygen.generateKey ();
 . 19                // 4. clave simétrica para obtener el byte originales matriz 
20 es              byte [] RAW = original_key.getEncoded ();
 21 es              // 5. se genera la matriz de bytes de acuerdo con una clave AES 
22 es              una clave SecretKey = nuevo nuevo SecretKeySpec (RAW, "AES" );
 23 es                // 6. El AES algoritmo especificado de en el módulo de cifrado 
24              el sistema de cifrado de cifrado = Cipher.getInstance ( "el AES" );
 25                //7. La inicialización scrambler, el primer parámetro es encriptada (ENCRYPT_MODE) o operación de descifrado descifrado (DECRYPT_MODE), el segundo parámetro utilizado para la tecla 
26 es              cipher.init (Cipher.ENCRYPT_MODE, Key);
 27              // 8. El cifrado adquirido matriz de bytes contenidos (ajustado aquí a UTF-8) de lo contrario, si el contenido de la mezcla y chino Inglés serán descifrados al chino distorsión 
28              byte [] = content.getBytes byte_encode ( "UTF-8". );
 29              // . 9 según inicializado Encryptor - cifrado: el cifrado de datos 
30              byte [] = byte_AES Cipher.doFinal (byte_encode);
 31 es            // 10. los datos cifrados se convierte en una cadena de
 32              // en el presente documento encontrarán uso Base64Encoder menos de un paquete
 33              // solución:
 34              // en la trayectoria Build del proyecto para eliminar la biblioteca del sistema JRE, y luego añadir la biblioteca de la biblioteca del Sistema JRE, recompilación después de todo normal. 
35             Cadena AES_encode = nuevo String ( nuevo Base64Encoder () encode (byte_AES).);
36            // 11.将字符串返回
37              de retorno AES_encode;
38          } catch (NoSuchAlgorithmException e) {
 39              e.printStackTrace ();
40          } catch (NoSuchPaddingException e) {
 41              e.printStackTrace ();
42          } catch (InvalidKeyException e) {
 43              e.printStackTrace ();
44          } catch (IllegalBlockSizeException e) {
 45             e.printStackTrace ();
 46 es          } la captura (BadPaddingException E) {
 47              e.printStackTrace ();
 48          } la captura (UnsupportedEncodingException E) {
 49              e.printStackTrace ();
 50          }
 51 es          
52 es          // Si hay errores, Devolución nulll 
53 es          retorno  nulo ;         
 54 es      }

El principal problema es que las secciones del código:

  1. Comimos una excepción, ya que es una clase pública, ni siquiera el registro
  2. Después de una excepción, todavía devuelve un valor nulo.

Este método es cuando solemos utilizar, si usted no lee el código fuente directamente, el primer instinto es devolver el resultado correcto, si no es correcta, se producirá una excepción. nula Sin embargo, este código ha vuelto, la experiencia del usuario será loco, esto es lo que ah, por qué no, obviamente no hay ningún error, la desesperación, una mirada en el código. . . El original es deshacerse de lo anormal.

Este código es, hacer recomendaciones de mejora son:

  1. Declaración de lanza en el enfoque es
  2. Si se siente incómodo programa 1, dirigir una gran excepción captura, y luego tirar nueva RuntimeException (e.getMessage (), e);
  3. Está mal está mal, el error no puede matar a mí mismo, y luego devuelve un valor nulo.

Cuando cualquiera de registro, nivel de registro es erróneo, o para matar importante información de la pila de errores, haciendo la solución de problemas de producción, simplemente te hace volver loco.

Cuando se utiliza el registro de log4j, utilice el logger.error correcta () para el registro, por favor preste atención a reemplazar este método, no utilice el getMessage Excepción () método sólo registra el mensaje de esta excepción, y la excepción a la pila de error de abandonar, pila de errores inusual es una información útil, que le dirá qué líneas de código en el mal, para que pueda localizar rápidamente el error.

1  paquete com.demo;
2  
3  público  clase de prueba {
 4  
5      público  estáticas  void principales (args String []) {
 6          try {
 7              int a = 0 ;
8              int b = 1 ;
9  
10              System.out.println (b / a);
11          } catch (Exception e) {
 12              e.printStackTrace ();
13          }
 14      }
 15  
16 }

 

Esta información del código de pila de errores:

java.lang.ArithmeticException: / por cero
en com.demo.Test.main (Test.java:10)

Este mensaje de error de línea en com.demo.Test.main (Test.java:10) marcó el lugar equivocado, puede localizar rápidamente en cualquier lugar. Así que cuando el registro en, por favor no deshacerse de la pila mensaje de error.

 

Supongo que te gusta

Origin www.cnblogs.com/chongsha/p/12657724.html
Recomendado
Clasificación