代码之家  ›  专栏  ›  技术社区  ›  Karl

这个班是从哪里来的?

  •  3
  • Karl  · 技术社区  · 14 年前

    如何确定类(或资源)从何处加载?

    我正试图弄清楚一个类是从哪里加载的。有人知道你是否能找到以下信息:

    1. 这个类来自哪个jar文件?
    2. 哪个类加载器加载了该文件?
    6 回复  |  直到 14 年前
        1
  •  5
  •   Syntactic    14 年前

    班级 Class 有一个实例方法 getClassLoader() 返回对加载它所表示的类的类加载器的引用。注意这个可以返回 null . 见 here .

    所以,如果你想知道哪个类加载器加载了 String (举个例子)你可以:

    ClassLoader loader = String.class.getClassLoader();
    

    或:

    ClassLoader loader = "I'm a String".getClass().getClassLoader();
    
        2
  •  2
  •   Maurice Perry    14 年前

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

        3
  •  2
  •   Tom Hawtin - tackline    14 年前

    对于一类问题的解决方案是 MyClass.class.getProtectionDomain().getCodeSource().getLocation() . (实际上,可能有 null ProtectionDomain 或者那可能不是 CodeSource . 我也扔了一个 SecurityException .

        5
  •  0
  •   Yishai    14 年前

    我会和 -verbose:class 命令行选项,将输出保存到文本文件,然后使用grep(如果您是windows,则使用dos find)查看如何加载该类的详细信息。

        6
  •  0
  •   unmaskableinterrupt    14 年前

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

    insta.getclass().getprotectiondomain().getcodesource().getlocation()-从中加载类的位置