这堂课来自哪里?

时间:2010-04-13 18:58:27

标签: java jvm classloader

您如何确定从哪个类(或可能是资源)加载?

我正在尝试确切地从哪里加载一个类。有谁知道你能否找到以下内容:

  1. 该课程来自哪个Jar文件?
  2. 哪个类加载器加载了文件?

6 个答案:

答案 0 :(得分:5)

Class有一个实例方法getClassLoader(),它返回对加载了它所代表的类的类加载器的引用。请注意,这可以返回null。请参阅here

所以,如果您想知道哪个类加载器加载String(仅作为示例),您可以这样做:

ClassLoader loader = String.class.getClassLoader();

或:

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

答案 1 :(得分:2)

例如,您可以通过调用MyClass.class.getResource(“MyClass.class”)来获取URL。

答案 2 :(得分:2)

对于第一类解决方案是MyClass.class.getProtectionDomain().getCodeSource().getLocation()。 (实际上,可能有null ProtectionDomain或者可能没有CodeSource。我也会抛出SecurityException

答案 3 :(得分:1)

答案 4 :(得分:0)

我会使用-verbose:class命令行选项,将输出保存到文本文件,然后使用grep(或DOS查找,如果你是Windows)来查看有关如何加载该类的详细信息。

答案 5 :(得分:0)

如果你有一个类的实例 insta.getClass()。getClassLoader()。getName() - >这是加载类的类加载器

insta.getClass()。getProtectionDomain()。getCodeSource()。getLocation() - 该类是从

加载的