Indica a los clientes de su clase que el método DoBlah puede arrojar BlahException o cualquier otra excepción que lo extienda.
Si se trata de una excepción comprobada, el compilador requerirá que envuelva las llamadas a este método en un bloque try/catch. Si no está marcado, pueden optar por no detectar la excepción, pero tienen que ser conscientes de que si no lo hacen, se disparará más arriba en la pila de llamadas.
No dice nada sobre excepciones no verificadas como NullPointException o errores. Esos siempre pueden ser lanzados también. No son necesarios en la cláusula de lanzamientos.
Este código muestra cómo funciona:
ExceptionDemo.java:
package exceptions;
public class ExceptionDemo
{
public static void main(String[] args)
{
ExceptionDemo demo = new ExceptionDemo();
try
{
// Removing the try/catch will result in a compilation error
demo.doChecked();
}
catch (CheckedException e)
{
e.printStackTrace();
}
// Note: Not inside a try/catch, in spite of the throws clause
demo.doUnchecked();
}
public void doChecked() throws CheckedException
{
System.out.println("doing something that may throw a checked exception");
}
// Note: "throws" clause is unnecessary for an unchecked exception
public void doUnchecked() throws UncheckedException
{
System.out.println("doing something that may throw an unchecked exception");
}
}
CheckedException.java:
package exceptions;
public class CheckedException extends Exception
{
public CheckedException()
{
super();
}
public CheckedException(String message)
{
super(message);
}
public CheckedException(String message, Throwable cause)
{
super(message, cause);
}
public CheckedException(Throwable cause)
{
super(cause);
}
}
UncheckedException.java:
package exceptions;
public class UncheckedException extends RuntimeException
{
public UncheckedException()
{
super();
}
public UncheckedException(String message)
{
super(message);
}
public UncheckedException(String message, Throwable cause)
{
super(message, cause);
}
public UncheckedException(Throwable cause)
{
super(cause);
}
}
Curiosamente, no hay ninguna mención en absoluto que pueda encontrar de Excepciones en el Tutorial de Java (http://java.sun.com/docs/books/tutorial/java/TOC.html). Qué omisión peculiar. – skaffman
Solo por curiosidad, ¿cómo se especifica exactamente si se supone que se debe marcar o desmarcar una excepción (definida por el usuario)? ¿Es tan simple como tener que aparecer en esa sección de "lanzamientos", o hay algo que tienes que hacer en la propia clase de excepción? –
@skaffman Las excepciones se tratan en Essential Java Classes (http://java.sun.com/docs/books/tutorial/essential/index.html) en lugar de aprender el lenguaje Java. – mikej