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); } }