public class WatchingClassLoader extends ClassLoader {
  //name would be passed in as something like Jim.class
  @Override
  protected Class<?> loadClass(String name, boolean resolve) 
        throws ClassNotFoundException {
        
    System.out.println("Attempting to load class: " + name);
    Path toLoad = Paths.get(WATCH_CLASS_DIR + File.separator + name);
    try (final InputStream inputStream = Files.newInputStream(toLoad, 
        StandardOpenOption.READ)) {
      byte[] data = new byte[inputStream.available()];
      inputStream.read(data);
      Class<?> clazz = defineClass(name.replace(".class", ""), 
        data, 0, data.length);
      resolveClass(clazz);
      System.out.println("Class has been loaded");       
      return clazz;
    } catch (IOException e) {
      e.printStackTrace();
    }
    return super.loadClass(name, resolve);
  }
}