2010-04-21 25 views

Respuesta

31

Casi todos los métodos tendrían que declarar lanzarlo.

public void myMethod(String param) throws NullPointerException { 
    // 
} 

(Como nota al margen -. Eclipse, por ejemplo, le da un aviso cada vez que hay un "potencial de acceso a puntero nulo" por lo que se puede prevenir la excepción tan pronto como sea posible)

+0

+1 - Hará que el código sea muy feo. – duduamar

+8

También: capturar 'NullPointerException' específicamente es casi siempre una mala idea. –

+0

Si Java tuviera la posibilidad de declarar que una función no arroja una determinada excepción, se podría hacer que throws NullPointerException sea un valor predeterminado para cada función. Entonces uno podría declarar funciones que no lanzan una NullPointerException como 'public void myMethod (String param) no lanza NullPointerException' o usa'! Throws' – asmaier

11

excepciones de puntero nulo son extensiones de excepciones de tiempo de ejecución y, por lo tanto, son imprevistos en el flujo de su programa. No tendría sentido esperar que se lanzara una excepción de puntero nulo (¡espero!) Y, por lo tanto, nunca la declararía como una excepción marcada.

15

No es una excepción marcada (entre otras cosas) porque es extremadamente común. Puede ocurrir prácticamente en todas partes. Si se comprobó, casi cada método en cada programa Java en cualquier lugar tendría que declarar que es throws NullPointerException.

3

La respuesta de una frase que daría es que es el resultado de un error de programación, y las excepciones de error de programación no se marcan excepciones (IllegalStateException, ClassCastException, etc.).

Pero incluso si tuviera un argumento de por qué debería ser una excepción marcada, básicamente, todas las operaciones en una referencia de objeto pueden arrojarla, por lo que estaría por todos lados y literalmente cada método en un programa no trivial tendría que tirarlo, entonces, ¿cuál sería el punto?

2

Mi propia definición obligatoria para Excepción comprobada. Las excepciones comprobadas son excepciones que un API sería elevar en caso de una situación indeseable conocido surge

NullPointerException s no indica una situación "conocido indeseable". En cambio, generalmente se lanzan debido a situaciones sin mano en el código. Es decir, son la mayoría del tiempo debido a malas prácticas de codificación, como intentar obtener el tamaño de una lista que no se inicializa correctamente, etc. Por lo tanto, no tiene sentido hacer que se marquen excepciones, ya que cada objeto en Java podría ser nulo ¡¿en algún momento?!. NullPoitnerException`s nunca debe ser capturado tampoco.

+0

. El debería estar atrapado arriba en la pila de llamadas para ofrecer una mejor experiencia de usuario, en mi opinión – Yaneeve

+2

Esto suena como "incógnitas conocidas" y "incógnitas desconocidas" de Dick Cheney ;-). –

+0

@yaneeve, creo que "atrapado" significa un cheque como 'if (myList! = Null)' tipo de declaración. Aparte de eso, no debería haber nada como 'catch (NullPointerException npe)' en un código. Eso * nunca * debe pasar una revisión de código. –

3

Las excepciones comprobadas pueden ocurrir debido a algo en el entorno de , sobre el que su programa tiene poco o ningún control, salió mal (por ejemplo IOException, SQLException). Puedes anticiparlo y manejar ese caso.

A NullPointerException (normalmente) se produce porque hay algún error en su código. Si espera que se genere una NullPointerException, la solución correcta es corregir el error en lugar de manejar la excepción.

+0

@Heinzi - No estoy de acuerdo con el punto "ocurrir porque algo en el medio ambiente". Por ejemplo, un comando de inicio de sesión de JAAS podría lanzar 'LoginException' cuando las credenciales son incorrectas. O un 'AccountService' podría arrojar' InsufficientBalanceException' en algún escenario comercial. Por lo tanto, no están relacionados con el "medio ambiente" per se. –

+2

Bueno, uno podría considerar la entrada del usuario y el almacén de datos como parte del "Entorno", ya que son externos a la lógica del código en sí. –

+0

@ring bearer, una excepción de inicio de sesión es un problema de configuración (entorno) en la mayoría de los casos (el usuario no está configurado o no está configurado con esa contraseña). Las excepciones controladas se pueden usar de la manera que se describe para AccountService, pero como eso es parte de una API teórica desarrollada en casa, no creo que sea un buen ejemplo. – Yishai

0

¿Por qué incluirlo cuando cada función que escriba tendrá que declararlo? Solo para simplificar tu vida.

1

Las excepciones comprobadas son solo para las excepciones donde el programa puede recuperarse. Invocar algo en un objeto NULL es un problema para programadores y no se puede recuperar.

0

SI Se produce una excepción de puntero nulo, su proram se detendrá. Por lo tanto, se trata de una excepción.

Cuestiones relacionadas