2

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

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

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

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

它会返回CL2吗?请说清楚。

谢谢高压

4

2 回答 2

3

它会返回CL2吗?

如果它有权这样做,那么是的 - 为什么不呢?结果与您哪个类执行方法无关,它与您在哪个类上执行该方法有关(在这种情况下,是B.class由 CL2 加载的。)

文档

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

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

因此,假设它是您加载的实际类(而不是原语),并且安全管理器说您有权检查该类,是的 - 它将返回相应的类加载器(在本例中为 CL2。)

于 2013-09-27T14:58:33.750 回答
1

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

检查 API 文档

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

于 2013-09-27T14:59:43.987 回答