Introspection is possible due to the support of the Reflection API provided in the java.lang.reflect package. Your objects can get instances, descriptions, and interfaces of other objects through the Reflection API. You can determine all the methods and variables in an object, and you can determine all the exceptions and events thrown by an object. For reflection to work, all data types must be represented as objects. No problem, because Java is an object-oriented programming language, right? Actually, it is somewhat of a problem, because Java is a hybrid object-oriented programming language.
A Hybrid Object-Oriented Language
Strictly speaking, Java doesn't qualify as a pure object-oriented language because, in addition to objects ...