The throw Statement
A throw
statement is used to cause an exception to be thrown:
The expression in a throw
statement must produce a reference to an object that is an instance of the Throwable
class or one of its subclasses. Otherwise, the compiler issues an error message. You typically want the expression in a throw
statement to produce an object that is an instance of a subclass of the Exception
class.
Here is an example of a throw
statement:
throw new ProtocolException();
A throw
statement causes normal program execution to stop. Control is immediately transferred to the innermost enclosing try
statement in the search for a catch
clause that can handle the exception. If the innermost try
statement cannot handle the exception, the exception propagates up through enclosing statements in the current method. If the current method does not contain a try
statement that can handle the exception, the exception propagates up to the invoking method. If this method does not contain an appropriate try
statement, the exception propagates up again, and so on. Finally, if no try
statement is found to handle the exception, the currently running thread terminates. The termination of a thread is described in Stopping a thread.
As an exception propagates through enclosing try
statements, any finally
blocks associated with those try
statements are executed until the exception is caught. If a finally
block contains a break
, continue
, return
, or throw
statement, the pending control transfer initiated by the throw
statement is forgotten. Instead, control is transferred to the target of the break
, continue
, return
, or throw
statement in the finally
block.
References Exception Handling 9; Expression 4; The break Statement; The continue Statement; The return Statement; The try Statement; Throwable