站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题我使用的类来自哪儿?

我使用的类来自哪儿?

摘要: 我使用的类来自哪儿?

</td> </tr> <tr> <td height="35" valign="top" bordercolor="#FFFFFF" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="282" height="86" align="center" valign="top"> </td> <td width="402" valign="top">


如果你的CLASSPATH中有十数个目录,还有数十个.jar,在你引用一个class时,如何知道我所使用的这个class来自哪个目录或者来自哪个.jar呢?尤其在可能有多个版本位于多个目录或者.jar中的时候。不幸的是,很多人每天都在面对着这样的境况。

我曾经遇到过一个活生生的例子。曾经有同事在测试程序时总是报一个JDOM的一个类没有找到。但我们无数次地确认了jdom包就在它的lib目录下。并且在这个jdom.jar包中也找到了这个class。甚至重装了Windows,仍然是这样。而在其它人的环境中就没有问题。

最后终于发现原来在他的jre的lib/ext目录中不知道什么时候放入了一个jdom的老版本的jar。有意思的是即是重新安装了windows,这个ext其实还是在的。所以,重装有的时候并不是万能药。

</td> </tr> </table>

扯远了。下面看如何得到一个class的地址。代码如下:

import java.net.URL;

public class CpLookup
{
public static void main(String[] args)
{
if (args.length < 1)
{
System.out.println("Usage: java CpLookup [class name]");
System.exit(0);
};

CpLookup.lookup(args[0]);
}

public static void lookup (String clzName) {
if (! clzName.startsWith("/")) clzName = "/" + clzName;
clzName = clzName.replace('.', '/');
if (!clzName.endsWith(".class")) clzName += ".class";

System.out.println("CLASSPATH: " + System.getProperty("java.class.path"));

URL loc = CpLookup.class.getResource (clzName);
if (loc != null)
{
System.out.println(clzName + ": " + loc);
} else {
System.out.println(clzName + " not found.");
}
}
}

我们来运行一下看看:

C:\mysrc>java CpLookup java.lang.Object
CLASSPATH: .
/java/lang/Object.class: jar:file:/C:/Program%20Files/Java/j2re1.4.2_11/lib/rt.j
ar!/java/lang/Object.class

其实有效代码就一行:URL loc = CpLookup.class.getResource (clzName);

这在调试时也很有用。如果怀疑某个类的版本比较妖怪,可以使用CpLookup.lookup()一下,看看是不是在一个你根本想不到的地方存在了一个另类版本。也许可以在关键时候避免你熬个通宵。

</td> </tr> <tr>


↑返回目录
前一篇: Swing布局管理器 - OverlayLayout
后一篇: 浅谈JAVA程序破解