Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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:
- A class instance creation expression (§15.8), array creation expression (§15.9), or string concatenation operatior expression (§15.17.1) throws an
OutOfMemoryErrorif there is insufficient memory available. - An array creation expression throws an
ArrayNegativeSizeExceptionif the value of any dimension expression is less than zero (§15.9). - A field access (§15.10) throws a
NullPointerExceptionif the value of the object reference expression isnull. - A method invocation expression (§15.11) that invokes an instance method throws a
NullPointerExceptionif the target reference isnull. - An array access (§15.12) throws a
NullPointerExceptionif the value of the array reference expression isnull. - An array access (§15.12) throws an
IndexOutOfBoundsExceptionif the value of the array index expression is negative or greater than or equal to thelengthof the array. - A cast (§15.15) throws a
ClassCastExceptionif a cast is found to be impermissible at run time. - An integer division (§15.16.2) or integer remainder (§15.16.3) operator throws an
ArithmeticExceptionif the value of the right-hand operand expression is zero. - An assignment to an array component of reference type (§15.25.1) throws an
ArrayStoreExceptionwhen 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.