code: public static Class forName(String name) throws ClassNotFoundException {
  		// try with caller classloader
  		ClassLoader loader = getClassLoaderContextAt(3);
  		try {
  			return Class.forName(name, true, loader);
  		} catch (ClassNotFoundException e) {
  			// try with context classloader if set & different
  			ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
  			if (contextLoader == null || contextLoader == loader) {
  				throw e;
  			} else {
  				return Class.forName(name, true, contextLoader);
  			}
  		}
  	}
docs: Loads a specified class. First, the caller's classloader is used to load
  the class and if it fails the thread's context classloader is used to
  load the specified class.