这个类是从哪里来的?

4

你如何确定一个类(或资源)是从哪里加载的?

我正在尝试确定一个类从哪里加载。是否有人知道以下信息:

  1. 该类来自哪个Jar文件?
  2. 哪个类加载器加载了该文件?
6个回答

5
Class有一个实例方法getClassLoader(),它返回一个引用,指向加载它所代表的类的类加载器。请注意,这可能返回null。在此处查看:这里
因此,如果您想知道哪个类加载器加载了String(仅作为示例),您可以执行以下操作:
ClassLoader loader = String.class.getClassLoader();

或者:

ClassLoader loader = "I'm a String".getClass().getClassLoader();

1
可能是null。此外,类加载器通常从多个位置加载类和资源。 - Tom Hawtin - tackline

3

对于一个类,可以使用MyClass.class.getProtectionDomain().getCodeSource().getLocation()来获取其位置。(实际上,可能会有一个nullProtectionDomain或者没有CodeSource。也可能抛出一个SecurityException异常。)


2
你可以通过调用 MyClass.class.getResource("MyClass.class") 来获取URL。


0

我会使用-verbose:class命令行选项来处理这个问题,将输出保存到文本文件中,然后使用grep(或者如果你是Windows系统则使用DOS find)来查看加载该类的详细信息。


0
如果您有一个类的实例 insta.getClass().getClassLoader().getName() --> 这是加载该类的类加载器
insta.getClass().getProtectionDomain().getCodeSource().getLocation()- 类从哪里加载

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接