1 Determination of the class of an object.
2 Obtain the information about modifiers, fields, methods, constructors of a class
3 Identifying the constants and method declarations of a specific interface.
4 Creation of an instance of a class without knowing its name until runtime.
5 Setting and getting the value of a field of an object, without knowing the field name until runtime.