2010-12-02 27 views

Respuesta

11

Pruebe ... catch - for condiciones excepcionales, es decir, condiciones que no son causadas por código mal formado, pero que pueden alterar el flujo de control normal por eventos externos impredecibles.

aserciones para captura de código no válido, es decir, comprobar si un invariante se mantiene en la función, comprobar si un método interno es llamado con argumentos adecuados (por API pública es posible que aún desee una excepción para eso), etc.

Esas son mis pautas básicas, pero las convenciones varían de una situación a otra y de un idioma a otro.


Cuando usted está en duda, puede preguntarse: es que el registro de seguridad específico supone que todavía estará allí en el código de liberación, después de que probemos y terminar todo? Si responde "sí, sigue siendo necesario entonces", es probable que desee una excepción. De lo contrario, es probable que desee una afirmación.

5

Normalmente assert() no funciona en el código de versión, por lo que nunca puede reemplazar una estrategia try-catch. Sin embargo, me gusta usar assert() en lugares donde se lanzan excepciones. Para mí (como desarrollador), a menudo es más conveniente recibir un mensaje de assert() en la línea de falla que a través de la pila de excepción.

+1

Esta es una diferencia clave, el código afirmativo se atribuye con el atributo condicional, por lo que se puede omitir en compilaciones de lanzamiento. –

2

Se crean para diferentes propósitos. Assert es más para encontrar errores, try-catch es para el manejo de situaciones excepcionales.

2

Las situaciones de try-catch y assert son totalmente diferentes. Assert se usa para verificar si se espera el valor que ha recibido, como parámetro por ejemplo. No recomendaría usar assert en el código de producción, se usa principalmente en pruebas unitarias y rara vez para verificar los parámetros. Para comprobar los valores pasados ​​mejor usar algo como:

public void test(int i) { 
    if (i < 0) { 
    throw new IllegalArgumentException("i cannot be less than 0"); 
    } 
    ... 
} 

bloque Try-catch se utiliza cuando se sabe algo dentro del bloque que puede salir mal. Por ejemplo, escribe en una tarjeta SD y no hay espacio para escribir. O sucedió que tratas de leer la matriz fuera de los límites. A continuación, poner su código crítico en el bloque try-catch y de verificación de los excpetions:

try { 
    InputStream is = new FileInputStream("filename.txt"); 
    ... 
} catch FileNotFoundExcpetion { 
    System.out.println("file not found"); 
} finally { 
... 
} 

More acerca de las excepciones y tratar de captura-bloques.

Cuestiones relacionadas