There are several constructs and terms that are used before they are
defined, without any reference to where the definition may be found.
For example, “strictfp†is first used in section 5.1.2, page 81, with no
reference to where it is defined.
The “<:†operator first occurs in section 4.5, page 51. There is no hint as
to what it means until you get to page 55.
Section 4, page 34:
Type arguments and type variables (§4.4) are not reified at run-time.
But reification is not explained until section 4.7, page 56.
Section 4.3.2, page 48:
The type of a method invocation e.getClass(), where the expression e has
the static type T, is Class<? extends |T|>.
The |T| notation is not explained until section 4.6, page 56, where it turns
out it denotes erasure.
Section 6.3.1, page 119: “type-import-on-demand†and “static-import-on-
demand†are not defined yet. No hint is given until page 127 that “static-
import-on-demand†is defined in §7.5.4. Similarly no reference for “type-
import-on-demand†is given until page 130, where it seems it comes from
§7.5.2.
It should be the job of an editor to catch this sort of thing.