如何加载一个class文件

LZ说的这个文件,当然不仅仅指的是jar包中的class文件,而是硬盘上任意位置的class文件。
LZ首先想到的是Class的forName方法,该方法传入类的全名(xx.xx.xx.xx),返回该类的Class类的实例。然后再通过newInstance方法创建该类的实例:

但是,用这种方法加载class文件,该class文件必须在classpath下才可以。

看源码可知,forName是通过ClassLoader来加载的,所以LZ认为其中一定可以有加载任意class文件的方法。

这个方法通过传入class文件的字节数字,可以返回Class类的实例。但是这个方法是protected的,所以要自己实现一个子类.

Example.java的内容:

然后就可以用自定义的这个加载器加载这个类了。

事实上,不用自己定义一个新方法,只要重写findClass方法就可以。

加载时候使用loadClass方法来加载类。

使用loadClass方法的好处是,它会帮你自动完成双亲委派的操作。

发表评论