首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Java类是从文件系统的什么位置加载的?

我的Java类是从文件系统的什么位置加载的?
EN

Stack Overflow用户
提问于 2009-04-22 23:22:54
回答 4查看 10.4K关注 0票数 25

我认为这是每个Java程序员都会遇到的情况,如果他们做得足够长的话。您正在进行一些调试,并对类进行了更改。当您重新运行该程序时,这些更改似乎并未被采用,而是旧的类似乎仍在运行。你清理和重建一切,同样的问题。有时,这可能归结为类路径问题,同一个类在类路径上出现了不止一次,但似乎没有一种简单的方法来找出被加载的类来自哪里……

有没有办法找到加载的类的文件路径?如果类是从.class文件或.jar文件加载的,最好是可以工作的文件。有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-22 23:25:52

只需使用标准命令行开关“-verbose:class”运行java (请参阅the java documentation)。这将在每次加载一个类时打印出来,并告诉您它是从哪里加载的。

票数 30
EN

Stack Overflow用户

发布于 2009-04-22 23:26:45

如果您希望从应用程序内部以编程方式完成此操作,请尝试:

代码语言:javascript
复制
URL loc = MyClass.class.getProtectionDomain().getCodeSource().getLocation();

(注意,getCodeSource()可能返回null,因此不要在一行中完成所有操作:)

票数 15
EN

Stack Overflow用户

发布于 2009-04-22 23:38:16

代码语言:javascript
复制
public static URL getClassURL(Class klass) {
    String name = klass.getName();
    name = "/" + convertClassToPath(name);
    URL url = klass.getResource(name);
    return url;
}

public static String convertClassToPath(String className) {
    String path = className.replaceAll("\\.", "/") + ".class";
    return path;
}

只需将其粘贴到某个位置,并将其传递给您想要查找其定义的类的Class对象。不管它是从哪里调用的,它都应该可以工作,因为它在被搜索的类上调用getResource()。

代码语言:javascript
复制
public static void main(String[] args) {
    System.out.println(getClassURL(String.class));       
}

示例输出: jar:file:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar!/java/lang/String.class

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/779650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档