To define a checked exception you create a subclass (or hierarchy of subclasses) of java.lang.Exception. For example:
Methods that can potentially throw or propagate this exception must declare it:
You'll notice in the above example that
Sometimes there will be situations where you don't want to force every method to declare your exception implementation in its throws clause. In this case you can create an unchecked exception. An unchecked exception is any exception that extends java.lang.RuntimeException (which itself is a subclass of
Methods can throw or propagate
Unchecked exceptions are typically used to denote a programmer error, for example passing an invalid argument to a method or attempting to breach an array index bounds.
The java.lang.Throwable class is the root of all errors and exceptions that can be thrown within Java.
public class FooException extends Exception {
public FooException() { super(); }
public FooException(String message) { super(message); }
public FooException(String message, Throwable cause) { super(message, cause); }
public FooException(Throwable cause) { super(cause); }
}
public void calculate(int i) throws FooException, IOException;
... and code calling this method must either handle or propagate this exception (or both):try {
int i = 5;
myObject.calculate(5);
} catch(FooException ex) {
// Print error and terminate application.
ex.printStackTrace();
System.exit(1);
} catch(IOException ex) {
// Rethrow as FooException.
throw new FooException(ex);
}
IOException
is caught and rethrown as FooException
. This is a common technique used to encapsulate exceptions (typically when implementing an API).Sometimes there will be situations where you don't want to force every method to declare your exception implementation in its throws clause. In this case you can create an unchecked exception. An unchecked exception is any exception that extends java.lang.RuntimeException (which itself is a subclass of
java.lang.Exception
):public class FooRuntimeException extends RuntimeException {
...
}
FooRuntimeException
exception without declaring it; e.g.public void calculate(int i) {
if (i < 0) {
throw new FooRuntimeException("i < 0: " + i);
}
}
The java.lang.Throwable class is the root of all errors and exceptions that can be thrown within Java.
java.lang.Exception
and java.lang.Error are both subclasses of Throwable
. Anything that subclasses Throwable
may be thrown or caught. However, it is typically bad practice to catch or throw Error
as this is used to denote errors internal to the JVM that cannot usually be "handled" by the programmer (e.g. OutOfMemoryError). Likewise you should avoid catching Throwable
, which could result in you catching Error
s in addition to Exception
s.
No comments :
Post a Comment