java:ClassLoaders

时间:2013-09-27 14:55:09

标签: java classloader

说,我有一个A类,由ClassLoader CL1加载。

我有另一个B类,由ClassLoader CL2加载。

假设这两个类现在由它们各自的ClassLoader加载。

从A开始,如果我执行以下语句,结果会是什么:B.class.getClassLoader();

它会返回CL2吗?请澄清。

由于 HV

2 个答案:

答案 0 :(得分:3)

  

它会返回CL2吗?

如果它有权这样做那么是 - 为什么不呢?结果与您从执行方法的类无关,它与您在上执行方法的类有关(在本例中为{{1}这是由CL2加载的。)

来自docs

  

返回类的类加载器。某些实现可能使用null来表示引导类加载器。如果此类由引导类加载器加载,则此方法将在此类实现中返回null。

     

如果存在安全管理器,并且调用者的类加载器不为null且调用者的类加载器与请求类加载器的类的类加载器的祖先不同,则此方法调用安全性manager的checkPermission方法,具有RuntimePermission(“getClassLoader”)权限,以确保可以访问该类的类加载器。

所以假设它是一个你加载的实际类(而不是一个原语),并且安全管理器说你有权检查类,是的 - 它将返回相应的类加载器(在这个例子中为CL2)。

答案 1 :(得分:1)

它确实返回加载了B类的类加载器,但调用者应该拥有该类加载器的权限。

检查API文档

http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getClassLoader()