Java Reference
In-Depth Information
by the run-time value of the expression is assignment compatible (§ 5.2 ) with some
other reference type.
• Casting (§ 5.5 , § 15.16 ). The class of the object referenced by the run-time value of
the operand expression might not be compatible with the type specified by the cast.
For reference types, this may require a run-time check that throws an exception if
the class of the referenced object, as determined at run time, is not assignment
compatible (§ 5.2 ) with the target type.
• Assignment to an array component of reference type (§ 10.5 , § 15.13 , § 15.26.1 ) .
The type-checking rules allow the array type S [] to be treated as a subtype of T [] if
S is a subtype of T , but this requires a run-time check for assignment to an array
component, similar to the check performed for a cast.
• Exception handling (§ 14.20 ). An exception is caught by a catch clause only if the
class of the thrown exception object is an instanceof the type of the formal paramet-
er of the catch clause.
Situations where the class of an object is not statically known may lead to run-time type
errors.
In addition, there are situations where the statically known type may not be accurate at
run time. Such situations can arise in a program that gives rise to compile-time unchecked
warnings. Such warnings are given in response to operations that cannot be statically guar-
anteed to be safe, and cannot immediately be subjected to dynamic checking because they
involve non-reifiable (§ 4.7 ) types. As a result, dynamic checks later in the course of pro-
gram execution may detect inconsistencies and result in run-time type errors.
A run-time type error can occur only in these situations:
• In a cast, when the actual class of the object referenced by the value of the operand
expression is not compatible with the target type specified by the cast operator
5.5 , § 15.16 ) ; in this case a ClassCastException is thrown.
• In an automatically generated cast introduced to ensure the validity of an operation
on a non-reifiable type (§ 4.7 ) .
• In an assignment to an array component of reference type, when the actual class of
the object referenced by the value to be assigned is not compatible with the actual
run-time component type of the array (§ 10.5 , § 15.13 , § 15.26.1 ); in this case an Ar-
rayStoreException is thrown.
• When an exception is not caught by any catch clause of a try statement (§ 14.20 ); in
this case the thread of control that encountered the exception first attempts to in-
voke an uncaught exception handler (§ 11.3 ) and then terminates.
Search WWH ::




Custom Search