You can use a custom class loader to load things that are not on the normal classpath. As noted above, you rarely have to think about such things. Maybe if you're writing some kind of plug-in architecture or working in a complex environment like an
EJB container or you want to do something cute like reload a class in a running system.
What brought it to your attention? Have you bumped into a place you need one?