Java is built around classes; these classes have to be loaded into memory and loading that is the responsibility of class loaders. The first part of this course will look at this class loading mechanism and how to write class loaders. Once you understand this, several scenarios become available, such as hot deployment of classes and the side-by-side loading of classes. Java has a rich type system and rich metadata. Reflection is the mechanism by which you can examine that metadata at runtime, and use that information to build rich applications. In the second part of this course, we will see how to use reflection to both examine this metadata at runtime and use it within our applications.