Он сообщает клиентам вашего класса, что метод DoBlah может вызывать исключение BlahException или любое другое исключение, которое расширяет его..
Если это проверенное исключение, компилятор потребует, чтобы они переносили вызовы этого метода в блок try/catch. Если он не установлен, они могут отказаться от исключения, но им нужно знать, что если они этого не сделают, он будет пузыряться дальше в стеке вызовов.
В нем ничего не говорится об исключенных исключениях, таких как NullPointException или ошибки. Их всегда можно бросить. Они не требуются в предложении бросков.
Этот код показывает, как это работает:
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);
}
}
Необычно, нет никаких упоминаний о том, что я могу найти Исключения в учебнике Java (http://java.sun.com/docs/books/tutorial/java/TOC.html). Какое своеобразное упущение. – skaffman
Как раз для моего любопытства, как именно вы указываете, нужно ли проверять или отменять (определяемое пользователем) исключение? Это так же просто, как заставить его появляться в этом разделе «бросает», или есть что-то, что вам нужно сделать в самом классе исключения? –
@skaffman Исключения охватываются основными классами Java (http://java.sun.com/docs/books/tutorial/essential/index.html), а не изучением Java-языка. – mikej