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.