两种:
(1)
Class的装载分了三个阶段,loading,linking和initializing。
Class.forName(className)装载的class已经被初始化,而ClassLoader.loadClass(className)装载的class还没有被link。
(2)
Class.forName是从指定的classloader中装载类,如果没有指定,也就是一个参数的时候,是从装载当前对象实例所在的classloader中装载类。而ClassLoader的实例调用loadclass方法,是指从当前ClassLoader实例中调用类,而这个实例与装载当前所在类实例的Classloader也许不是同一个。
使用多个classloader的情况非常常见,比如说我们的app server,那么都是这样的. 在Web与EJB间, 他们的classLoader就是不同的,这样做的目的就是为了避免两者间类装载的相互干扰。希望使用在自己的Class Loader来实现特定的操作,请使用ClassLoader方式。