ClassLoader.loadClass 메서드는 정적 초기화 블록을 실행하지 않으므로 사용하지 말자.
Note ≣
URLClassLoader는 파일 시스템에서 클래스를 로드한다. 다른 곳에서 클래스를 로드하려면 독자적으로 클래스 로더를 구현해야 한다. 꼭 구현해야 하는 메서드는 findClass 메서드 하나다.
public class MyClassLoader extends ClassLoader {
...
@Override public Class<?> findClass(String name)
throws ClassNotFoundException {
byte[ ] bytes = 클래스 파일의 바이트들
return defineClass(name, bytes, 0, bytes.length);
}
}
클래스를 컴파일해서 메모리에 저장하고 로드하는 예제는 14장 컴파일링과 스크립팅을 참고하자.