2010-10-15 33 views
40

¿Puede alguno de ustedes explicar cuáles son las diferencias entre throw, throws y Throwable y cuándo usar qué?Manejo de excepciones: lanzar, arrojar y Throwable

+1

Java tiene ninguno. Tiene un método 'throw' de la clase Throwable, y tiene una palabra clave' throws' utilizada en los encabezados de métodos. Son dos cosas bastante diferentes. Olvídate de 'throws' al principio y solo averigua qué hace' throw'. 'throws' solo es necesario para mantener feliz al compilador. –

Respuesta

68
  • throws: se utiliza al escribir métodos, declarar que el método en cuestión produce la excepción especificada (comprobado).

    A diferencia de las excepciones comprobadas, las excepciones de tiempo de ejecución (NullPointerExceptions, etc.) pueden producirse sin que el método declare throws NullPointerException.

  • throw: instrucciones para realmente arrojar la excepción. (O más específicamente, el Throwable).

    La palabra clave throw viene seguida de una referencia a Throwable (normalmente una excepción).

Ejemplo:

enter image description here


  • Throwable: Una clase que se debe extender con el fin de crear su propio, personalizado, throwable.

Ejemplo:

enter image description here


+0

Para agregar capturas de pantalla a fragmentos de código, +1 para usted, señor. Buena respuesta. –

+2

+1 para una ilustración nítida y detallada. – 0x6900

+0

Guau, felicitaciones por la explicación detallada. – fruqi

1

Throw se utiliza para lanzar una excepción, throws (si adivinado correctamente) se utiliza para indicar que el método puede lanzar en particular excepción, y la clase Throwable es la superclase de todos los errores y excepciones en Java

How to Throw Exceptions

2

tiro - se utiliza para lanzar una declaración Exception.The tiro requiere un solo argumento: un objeto de clase throwable

tiros - se utiliza para especifica que el método puede lanzar una excepción

Throwable - Esta es la superclase de todos los errores y excepciones en el lenguaje Java. puedes lanzar solo objetos que se derivan de la clase Throwable. throwable contiene una instantánea de la pila de ejecución de la rosca en el momento de su creación

9
  • throw: declaración de tirar objeto t donde t instanceof java.lang.Throwable debe ser cierto.
  • throws: un token de firma de método para especificar excepciones marcadas throw n mediante ese método.
  • java.lang.Throwable: el tipo principal de todos los objetos que se pueden lanzar (y atrapar).

See here for a tutorial on using exceptions.

+0

+1 para la respuesta de la cápsula. – 0x6900

5

Esto realmente fácil de entender.

El java.lang.Throwable:

La clase Throwable es la superclase de todos los errores y excepciones en el lenguaje Java. Sólo objetos que son instancias de esta clase (o una de sus subclases) son lanzada por la máquina virtual de Java o pueden ser lanzados por la sentencia Java throw. Del mismo modo, solo esta clase o una de sus subclases puede ser el argumento escriba en una cláusula catch. More

La palabra clave tiros se utiliza en la declaración de método, esta especificar qué tipo de excepción [clase Throwable] que puede esperar de este método.

La palabra clave throw se utiliza para lanzar un objeto que es instancia de la clase Throwable.


Para que no ver algunos ejemplo:

creamos nosotros mismos una clase de excepción

public class MyException super Exception { 

} 

El creamos un método que crear un objeto de nuestra clase de excepción y lanza que el uso de la palabra clave lanzar.

private void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class 
{ 
    Exception e = new MyException(); //We create an exception 

    if(true) { 
    throw e; //We throw an exception 
    } 
} 

Cuando vamos a utilizar el método throwMeAException(), nos vemos obligados a cuidar de él en forma específica porque tenemos la información que arroja algo, en este caso tenemos tres opciones.

primera opción es el uso de try bloque y catch para controlar la excepción:

private void catchException() { 

    try { 
    throwMeAException(); 
    } 
    catch(MyException e) { 
    // Here we can serve only those exception that are instance of MyException 
    } 
} 

La segunda opción es pasar la excepción

private void passException() throws MyException { 

     throwMeAException(); // we call the method but as we throws same exception we don't need try catch block. 

    } 

tercera opción es coger y volver a emitir la excepción

private void catchException() throws Exception { 

    try { 
    throwMeAException(); 
    } 
    catch(Exception e) { 
     throw e; 
    } 
} 

Reanudar, cuando necesite detener alguna acción, puede lanzar la Excepción que se restituirá hasta que no se encuentre en el servidor mediante un bloque try-catch. Donde sea que use el método que arroje una excepción, debe manejarlo mediante el bloqueo try-catch o agregar las declaraciones a sus métodos.

La excepción de esta regla es java.lang.RuntimeException que no tienen que declararse. Esta es otra historia como el aspecto del uso de excepciones.

+0

Buen ejemplo. Gracias por su tiempo y esfuerzo al explicarme esto. – Sumithra

1

Throw:

se utiliza para tirar de hecho la excepción, mientras que lanza es declarativo para el método. No son intercambiables.

throw new MyException("Exception!); 

Lanza:

Esto es para ser utilizado cuando no se está utilizando la sentencia catch intento en su código, pero ustedes saben que esta clase en particular es capaz de lanzar tal y tal excepción (solo las excepciones). En esto no usa el bloque try catch pero escribe usando la cláusula throw en el punto apropiado de su código y la excepción se lanza al llamador del método y es manejada por él. También se utiliza la palabra clave throws cuando la función puede arrojar una excepción marcada.

public void myMethod(int param) throws MyException 
-1

La misma respuesta que el anterior pero con copiar y pegar el placer:

public class GsonBuilderHelper { 
    // THROWS: method throws the specified (checked) exception 
    public static Object registerAndRun(String json) throws Exception { 

     // registering of the NaturalDeserializer 
     GsonBuilder gsonBuilder = new GsonBuilder(); 
     gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer()); 
     Gson gson = gsonBuilder.create(); 

     Object natural = null; 
     try { 
      // calling the NaturalDeserializer 
      natural = gson.fromJson(json, Object.class); 
     } catch (Exception e) { 
      // json formatting exception mainly 
      Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString()); 
      throw new Exception(e); // <---- THROW: instance of class Throwable. 
     } 
     return natural; 
    } 
} 
1

Throwable : en Java, se drieved toda clase de execption del error y de la clase java.lang.Throwable. Es la parte superior de la jerarquía de clases de error y excepciones. Solo los objetos que son instancias de esta clase (o una de sus subclases) son lanzados por la Máquina Virtual de Java o pueden ser lanzados por la declaración throw de Java.

Throws: es un modificador posterior al método y especifica qué ejecuciones puede ejecutar el método. Si se marcan excepciones, el compilador garantizará que el código que invoca ese método debe capturar estas excepciones marcadas.

Throw: declaración se utiliza para arrojar un error o excepciones. La instrucción throw requiere un único argumento: una instancia de cualquier subclase de la clase Throwable o Throwable. La ejecución de la instrucción de lanzamiento activa la JVM para lanzar esta excepción y hace que se produzca una excepción.

1

Listando ...

Throw

  1. Java throw palabra clave se utiliza para throw explícitamente una excepción.
  2. La excepción comprobada no se puede propagar utilizando throw solamente.
  3. Throw seguido de una instancia.
  4. Throw se usa dentro del método.
  5. No se pueden throw múltiples excepciones.

Lanza

  1. Java throws palabra clave se utiliza para declarar una excepción.
  2. La excepción controlada se puede propagar con throws.
  3. Throws seguido de la clase.
  4. Throws se utiliza con la firma del método.
  5. Puede declarar excepciones múltiples p. public void method()throws IOException,SQLException
0

Hay 2 tipos principales de Excepciones:
Excepciones tiempo de ejecución (no marcado): por ejemplo. NullPointerException, ClassCastException, ..
Excepciones controladas: por ej. FileNotFoundException, CloneNotSupportedException, ..

Las excepciones de tiempo de ejecución son excepciones que ocurren en el tiempo de ejecución y el desarrollador no debe intentar atraparlo o detenerlo. Solo escriba el código para evitarlos o emita un comando throw, cuando se cumplan los criterios de error. Usamos throw dentro del cuerpo del método.

public Rational(int num, int denom){ 
if(denom <= 0) { 
    throw new IllegalArgumentException("Denominator must be positive"); 
} 
this.num=num; 
this.denom=denom; 
} 

Sin embargo, para excepciones comprobadas, la JVM espera que lo maneja y dará error de compilación si no se maneja por lo que declara que lanza ese tipo de excepción, como se ve a continuación en el método clone().

Class Employee{ 
public Employee clone() throws CloneNotSupportedException{ 
    Employee copy = (Employee)super.clone(); 
    copy.hireDate = (Date)hireDate.clone(); 
    return copy; 
} 
} 
Cuestiones relacionadas