try traducir sale porque pointer catch java exception-handling null

java - traducir - nullpointerexception processing



¿Por qué "throw null" no crea un error de compilación en Java? (4)

class ThrowNull { public static void main(String[] args) { throw null; } }

Sabemos que la regla para lanzar es throw ThrowableInstance; , donde ThrowableInstance debe ser un objeto de tipo Throwable o una subclase de Throwable.

Los tipos simples, como int o char, así como las clases no tirables, como String y Object, no se pueden usar como excepciones. null es un literal de Java especial que representa un valor nulo.

Entonces, ¿por qué throw null; compilar en este código?


Creo que debido a que Null se puede incorporar a cualquier tipo de referencia. En el tiempo de compilación, no hay nada de malo si está lanzando null en lugar de throwable.


De acuerdo con la especificación del lenguaje , una declaración de throw se define como:

throw Expression

Y si la Expression evalúa como null , se NullPointerException una NullPointerException . Específicamente,

Si la evaluación de la Expresión se completa normalmente, produciendo un valor null , se crea y lanza una instancia V '' de la clase NullPointerException lugar de null .

Dado que NullPointerException extiende RuntimeException , es una excepción no verificada. Esto podría explicar por qué no hay un error en tiempo de compilación informado de este constructo.


En generel, y no solo tirar. Cualquier variable de objeto se puede asignar nulo. Así que podemos ver que el tiro no es un caso especial. ¿Deberia ser? tal vez. ¿Es consistente? Sí.


Hay muchas cosas que un compilador no verifica, supone que usted hace cosas por una buena razón que tal vez no conozca. Lo que sí intenta prevenir es los errores comunes que cometen los desarrolladores.

Es posible que alguien piense que esta es una buena mano corta para

throw new NullPointerException();

Integer i = null; try { i.intValue(); } catch (NullPointerException npe) { System.err.println("Caught NPE"); npe.printStackTrace(); }

y

try { throw null; } catch (NullPointerException npe) { System.err.println("Caught NPE"); npe.printStackTrace(); }

imprime en Java 6 actualización 38

Caught NPE java.lang.NullPointerException at Main.main(Main.java:9)