说,我有一个A类,由ClassLoader CL1加载。
我有另一个B类,由ClassLoader CL2加载。
假设这两个类现在由它们各自的ClassLoader加载。
从A开始,如果我执行以下语句,结果会是什么:B.class.getClassLoader();
它会返回CL2吗?请澄清。
由于 HV
答案 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()