Como Bill K dice. Las excepciones comprobadas son fáciles. Si su IDE/editor de programa no le proporciona una forma rápida de ver el método javadocs o las firmas, debe desecharlo. Seriamente.
excepciones no comprobadas son harina de otro costal. Pero creo que la mejor estrategia con excepciones no revisadas es no intentar atraparlas. En cambio, escribes tu código para que evite tirarlos en primer lugar. Por ejemplo;
// ... not sure if 'obj' is null
if (obj != null) {
obj.someMethod();
}
// ... not sure if 'obj' has the right type
if (obj instanceof Foo) {
Foo foo = (Foo) obj;
}
// ... not sure if 'i' is in range
if (i >= 0 && i < array.length) {
.... = array[i];
}
Aquí es por lo que recomiendo esto:
- Una prueba de guardia es órdenes de magnitud más eficientes que lanzar y atrapar una excepción.
- Una prueba de guardia es más fácil de leer ... menos líneas de código.
- Si se coge una excepción sin control, nunca se puede estar seguro de que ha pasado por las razones que usted piensa que lo hizo; por ejemplo:
// obj might be null ...
try {
obj.doSomething();
} catch (NullPointerException ex) {
System.err.println("obj was null"); // WRONG!!!
// the NPE could have happen inside doSomething()
}
- Si una excepción sin control se debe a un error, te quiero un StackTrace y (dependiendo de la aplicación) puede que no desee recuperar.
Obviamente, solo incluye estos controles de "guardia" donde su comprensión del código indica que son necesarios. Así, por ejemplo, si sabe que 'obj' debe ser no nulo y 'i' debería estar en el rango, es una buena idea dejar los cheques. Si omites demasiadas pruebas, obtendrás una excepción ... pero eso es bueno porque puedes usar la stacktrace para descubrir por qué tu comprensión del código era incorrecta y quizás arreglar el error subyacente.
No es realmente cierto para las excepciones marcadas, un método define qué excepciones puede arrojar. Para todos los demás (como NPE), bueno, hay una razón por la que no están marcados. – Gandalf
Puede usar BCEL o ASM para analizar los binarios y repetir el código en cada método para encontrar su respuesta. –