No more: the end is sudden and abrupt.
--William Wordsworth, Apology for the Foregoing Poems (1831)
Every expression has a normal mode of evaluation in which certain computational steps are carried out. The following sections describe the normal mode of evaluation for each kind of expression. If all the steps are carried out without an exception being thrown, the expression is said to complete normally.
If, however, evaluation of an expression throws an exception, then the expression is said to complete abruptly. An abrupt completion always has an associated reason, which is always a throw
with a given value.
Run-time exceptions are thrown by the predefined operators as follows:
OutOfMemoryError
if there is insufficient memory available.
ArrayNegativeSizeException
if the value of any dimension expression is less than zero (§15.9).
NullPointerException
if the value of the object reference expression is null
.
NullPointerException
if the target reference is null
.
NullPointerException
if the value of the array reference expression is null
.
IndexOutOfBoundsException
if the value of the array index expression is negative or greater than or equal to the length
of the array.
ClassCastException
if a cast is found to be impermissible at run time.
ArithmeticException
if the value of the right-hand operand expression is zero.
ArrayStoreException
when the value to be assigned is not compatible with the component type of the array.
A method invocation expression can also result in an exception being thrown if an exception occurs that causes execution of the method body to complete abruptly. A class instance creation expression can also result in an exception being thrown if an exception occurs that causes execution of the constructor to complete abruptly. Various linkage and virtual machine errors may also occur during the evaluation of an expression. By their nature, such errors are difficult to predict and difficult to handle.
If an exception occurs, then evaluation of one or more expressions may be terminated before all steps of their normal mode of evaluation are complete; such expressions are said to complete abruptly. The terms "complete normally" and "complete abruptly" are also applied to the execution of statements (§14.1). A statement may complete abruptly for a variety of reasons, not just because an exception is thrown.
If evaluation of an expression requires evaluation of a subexpression, abrupt completion of the subexpression always causes the immediate abrupt completion of the expression itself, with the same reason, and all succeeding steps in the normal mode of evaluation are not performed.