Pregunta

throw new Exception();

tiene una sobrecarga bastante grande, ya que crea un stackTrace completo, etc.
Hace

throw new Throwable();

presenta el mismo problema?¿Este comportamiento se hereda o lanzar un Throwable tiene una sobrecarga menor (o no)?

EDITAR
Desde un analista Desde el punto de vista del usuario, un usuario que inserta una contraseña incorrecta es una excepción al orden de ejecución normal de un programa.Entonces si tengo:

public Session newSession() {  
  validate_user_and_password();   
}

lanzar una excepción UserNotValidException sonaría correcto desde un punto de vista analistas Punto de vista.
Regresando null o 0 simplemente suena incorrecto si su código tiene una abstracción bastante buena.Sólo quería saber si realmente podría implementar esto en código, o si tendría que dejarlo en teoría.

Existe una buena diferencia entre la excepción desde el punto de vista de la programación y la excepción desde el punto de vista del analista.

Nota:He dado un ejemplo realmente simple y tonto, este no es mi caso.
Nota 2:se que regresar null sería lo normal, pero debo tener un código OO correctamente abstraído y, personalmente, no veo ningún daño en esto.

¿Fue útil?

Solución

Throwable también crea un StackTrace cuando se crea. A partir de los documentos href="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html" rel="noreferrer"> Throwable :

  

throwable contiene una instantánea de la pila de ejecución de su rosca en el momento que se creó.

Así que en términos de gastos generales con respecto a la creación de un StackTrace, no debería haber ninguna diferencia entre Exception y Throwable.

Si está utilizando excepciones para los "acontecimientos excepcionales" (como debe ser), entonces no debe ser demasiado preocupado por la sobrecarga de un StackTrace. Un acontecimiento excepcional se produce raramente en la ejecución de código. Así excepciones no deben afectar al funcionamiento del código normal de ninguna manera significativa.

Otros consejos

No, lo que necesita su propia subclase de evitar ese efecto.

Exception ex = new Exception() {
    @Override public Throwable fillInStackTrace() {
        return this; // and do nothing else
    }
};

Esto crea una instancia de excepción que no llenará el seguimiento de la pila (la creación de excepciones a los delegados a fillInStackTrace realidad llenar el seguimiento de la pila) y por lo tanto barata de crear.

Con la compilación JIT, que en realidad no es menos cierto que hay un montón de oído por casualidad a lanzar una Exception en Java. Pero lanzar una Throwable no es muy diferente, ya que obtendrá un seguimiento de pila allí también.

Si está interesado, hay un artículo muy interesante llamado "manejo de excepciones de Java eficiente en la compilación just-in-time" ( enlace ). No es una lectura ligera, pero muy informativo.

nunca debe lanzamiento o la recuperación Throwable. El alcance de la excepción es demasiado grande.

Como se dijo anteriormente, las excepciones sólo debe utilizarse cuando sea necesario, es decir: en circunstancias excepcionales y debe ser específica a la situación que les dio origen. Aparte de eso, la captura de un Throwable implica una serie de excepciones, como OutOfMemoryException. Un error de esta magnitud no se puede recuperar a partir de (fácilmente) y no debe ser manejado por el desarrollador.

Throwable es clase padre de Excepción. así Exception class se hereda de Throwable.

Throwable Excepción vs.

excepción de Java

Como @mangoDrunk dijo: "Throwable es la superclase de excepción y error."

Se puede mirar el código fuente de las dos clases de ver que Exception no hacer nada más allá de exponer a los mismos constructores como Throwable . Toda la carne, y por lo tanto por encima, vive en Throwable.

Aunque Exception se introduce cierta sobrecarga adicional que sería un exceso de optimización claro para el uso Throwable lugar. Utilice la herramienta correcta para el trabajo, no cooptar la herramienta equivocada sólo porque es más ligero.

java.lang.Exception extiende java.lang.Throwable, así que es la misma por encima. Desde el Javadoc :

  

La clase Throwable es la superclase de todos los errores y excepciones en el lenguaje Java. Sólo los objetos que son instancias de esta clase (o una de sus subclases) son arrojados por la máquina virtual Java o pueden ser lanzados por la sentencia throw Java. De manera similar, sólo que esta clase o una de sus subclases pueden ser el tipo de argumento en una cláusula catch.

     

Los casos de dos subclases, errores y excepciones, se utilizan convencionalmente para indicar que se han producido situaciones excepcionales. Típicamente, estos casos son recién creado en el contexto de la situación excepcional a fin de incluir la información pertinente (tal como datos de seguimiento de la pila).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top