深入探讨Java的类加载机制

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

2. 隐式加载和显示加载

Java 的加载方式分为隐式加载( implicit )和显示加载( explicit ),上面的例子中就是用的隐式加载的方式。所谓隐式加载就是我们在程序中用 new 关键字来定义一个实例变量, JRE 在执行到 new 关键字的时候就会把对应的实例类加载进入内存。隐式加载的方法很常见,用的也很多, JRE 系统在后台自动的帮助用户加载,减少了用户的工作量,也增加了系统的安全性和程序的可读性。

相对于隐式加载的就是我们不经常用到的显示加载。所谓显示加载就是有程序员自己写程序把需要的类加载到内存当中,下面我们看一段程序:class TestClass{public void method(){ System.out.println(“TestClass-method”);}}public class CLTest {public static void main(String args[]) { try{ Class c = Class.forName(“TestClass”); TestClass object = (TestClass)c.newInstance(); object.method(); }catch(Exception e){ e.printStackTrace(); }}} 我们通过 Class 类的 forName (String s) 方法把自定义类 TestClass 加载进来,并通过 newInstance ()方法把实例初始化。事实上 Class 类还很多的功能,这里就不细讲了,有兴趣的可以参考 JDK 文档。

Class 的 forName() 方法还有另外一种形式: Class forName(String s, boolean flag, ClassLoader classloader) , s 表示需要加载类的名称, flag 表示在调用该函数加载类的时候是否初始化静态区, classloader 表示加载该类所需的加载器。

forName (String s) 是默认通过 ClassLoader.getCallerClassLoader() 调用类加载器的,但是该方法是私有方法,我们无法调用,如果我们想使用 Class forName(String s, boolean flag, ClassLoader classloader) 来加载类的话,就必须要指定类加载器,可以通过如下的方式来实现:Test test = new Test();//Test 类为自定义的一个测试类;ClassLoader cl = test. getClass().getClassLoader(); // 获取 test 的类装载器;Class c = Class.forName(“TestClass”, true, cl); 因为一个类要加载就必需要有加载器,这里我们是通过获取加载 Test 类的加载器 cl 当作加载 TestClass 的类加载器来实现加载的。

[1][2][3][4]

没有什么可留恋,只有抑制不住的梦想,

深入探讨Java的类加载机制

相关文章:

你感兴趣的文章:

标签云: