In the Java programming language, a mechanism by which Java programs can
interrogate the Java Virtual Machine about classes, interfaces
and objects. Details can be obtained about the methods and
properties of the objects or classes at runtime, allowing
dynamic binding of objects not known at compile time. Properties can be
accessed or methods invoked, subject to regular JVM security considerations.
Reflection has been part of core Java since version 1.1, and is a natural
extension of capabilities in other object-oriented languages such as C++'s
RTTI.
The capabilities offered by reflection saw the onset of maturity in the Java
programming language, allowing Java application software to cleanly support
extensible mechanisms such as plugins. Perhaps more importantly, it became
viable for Java development tools such as the debugger and IDE to themselves
be effectively written in Java, further strengthening the language's cross-platform
stance.
Reflection is the foundation for further Java API facilities, such as
introspection and dynamic proxies, and is used extensively in other
Java technologies, particularly the J2EE platform.