The JVM Constants API is defined in the package
java.lang.constants, which contains the nominal descriptors of various
types of loadable constants. These nominal descriptors are useful for applications that
manipulate class files and compile-time or link-time program analysis tools.
A nominal descriptor is not the value of a loadable constant but a description of its
value, which can be reconstituted given a class loading context. A loadable constant is
a constant pool entry that can be pushed onto the operand stack or can appear in the
static argument list of a bootstrap method for the
instruction. The operand stack is where JVM instructions get their input and store their
output. Every Java class file has a constant pool, which contains several kinds of
constants, ranging from numeric literals known at compile-time to method and field
references that must be resolved at run-time.
The issue with working with non-nominal loadable constants, such as a
Class objects, whose references are resolved at run-time, is that
these references depend on the correctness and consistency of the class loading context.
Class loading may have side effects, such as running code that you don't want run and
throwing access-related and out-of-memory exceptions, which you can avoid with nominal
descriptions. In addition, class loading may not be possible at all.
See the package