Il indique aux clients de votre classe que la méthode DoBlah peut déclencher une exception BlahException ou toute autre exception qui l'étend.
S'il s'agit d'une exception vérifiée, le compilateur exige que les appels à cette méthode soient renvoyés dans un bloc try/catch. Si elle n'est pas cochée, ils peuvent choisir de ne pas intercepter l'exception, mais ils doivent être conscients que s'ils ne le font pas, ils seront placés plus haut dans la pile d'appels.
Il ne dit rien sur les exceptions non contrôlées comme NullPointException ou les erreurs. Ceux-ci peuvent toujours être jetés aussi bien. Ils ne sont pas requis dans la clause throws.
Ce code montre comment cela fonctionne:
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);
}
}
Bizarrement, il n'y a aucune mention que je peux trouver des exceptions dans le tutoriel Java (http://java.sun.com/docs/books/tutorial/java/TOC.html). Quelle omission particulière. – skaffman
Juste pour ma curiosité, comment spécifiez-vous exactement si une exception (définie par l'utilisateur) est censée être cochée ou non? Est-ce aussi simple que de le faire apparaître dans cette section "throws", ou y a-t-il quelque chose que vous devez faire dans la classe d'exception elle-même? –
@skaffman Les exceptions sont couvertes dans les classes Java essentielles (http://java.sun.com/docs/books/tutorial/essential/index.html) plutôt que d'apprendre le langage Java. – mikej