Pregunta

Puede alguno de ustedes explicar cuáles son las diferencias entre throw, throws y Throwable y cuándo usar cuál?

¿Fue útil?

Solución

  • throws:. Se utiliza al escribir métodos, que declare que el método en cuestión arroja la especificada (comprobado) excepción

    A diferencia de excepciones revisadas, excepciones de tiempo de ejecución (NullPointerExceptions etc) puede ser lanzado sin tener la throws NullPointerException método declare.

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

    La palabra clave de banda es seguido por una referencia a un Throwable (por lo general una excepción).

Ejemplo:

introducir descripción de la imagen aquí


  • Throwable:. Clase que debe extender con el fin de crear su propia, a medida A, throwable

Ejemplo:

 introducir descripción de la imagen aquí


Otros consejos

  • throw:. Declaración a tirar t objeto donde t instanceof java.lang.Throwable debe ser verdad
  • throws:. Una firma de método de contadores a especificar excepciones controladas thrown por ese método
  • java.lang.Throwable:. Del tipo de los padres de todos los objetos que se pueden lanzar (y capturados)

Vea aquí un tutorial sobre el uso de excepciones.

Esto realmente fácil de entender.

La java.lang.Throwable :

  

La clase es Throwable   la superclase de todos los errores y   excepciones en el lenguaje Java. Solamente   objetos que son instancias de este   clase (o una de sus subclases) son   lanzada por la máquina virtual de Java o   puede ser lanzado por el Java   throw comunicado.   De manera similar, sólo que esta clase o una de   sus subclases pueden ser el argumento   escriba en una cláusula catch.    Más

La palabra clave lanza 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 tiro se utiliza para lanzar un objeto que es instancia de la clase Throwable.


A fin de ver algún ejemplo:

Nosotros 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 se utiliza la palabra clave tiro .

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.

La 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;
   }
}

reanudación, cuando se necesita para dejar de algún tipo de acción se puede lanzar la excepción de que se remontan hasta el servidor no es por algún bloque try-catch. Dondequiera que utiliza el método que se produce una excepción Usted debe manejarlo por bloque try-catch o añadir las declaraciones de sus métodos.

La excepción a esta regla son los java.lang.RuntimeException no tienen que ser declarados. Esta es otra historia como el aspecto del uso de la excepción.

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

lanza - 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. se puede tirar sólo los objetos que se derivan de la clase Throwable. throwable contiene una instantánea de la pila de ejecución de su rosca en el momento que se creó

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

Cómo lanzar excepciones

El tiro:

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

throw new MyException("Exception!);

Lanza:

Esto es para ser utilizado cuando no se está utilizando la sentencia catch try en su código pero ya se sabe que esta clase particular es capaz de lanzar tal y tal excepción (las únicas excepciones controladas). En este no se utiliza bloque catch intento pero de escritura usando la cláusula de tiro en el punto adecuado en el código y la excepción es lanzada a la persona que llama del método y es manejada por él. También los tiros palabra clave se utiliza cuando la función puede lanzar una excepción comprobada.

public void myMethod(int param) throws MyException 

Hay 2 tipos principales de excepciones:
Excepciones tiempo de ejecución (sin marcar) : por ejemplo. NullPointerException, ClassCastException, ..
Las excepciones comprobadas: por ejemplo. FileNotFoundException, CloneNotSupportedException, ..

Las excepciones de tiempo de ejecución son excepciones que se producen en tiempo de ejecución y el desarrollador no debe tratar de atrapar o detenerlo. Usted código sólo escritura para evitarlos o emitir un comando tiro , cuando se cumple el criterio de error. Utilizamos lanzar el interior 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 le dará compilador de error 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;
}
}

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top