假如项目中出现了多个同名的类,甚至是连包名都一样的类,如何知道这个类到底位于哪个包,或是哪个目录下呢?
这里有一个工具类,就可以完成这个功能。
用法:java WhichClass classname
例如:运行java WhichClass java.lang.Object
输出如下
Found class 'java.lang.Object'
at URL 'jar:file:/C:/jdk1.5.0_15/jre/lib/rt.jar!/java/lang/Object.class'
源代码如下
import java.net.URL;
class WhichClass {
public static void main(String[] args) {
String targetClass = null;
if (args.length == 1) {
targetClass = args[0];
}
else {
printUsage();
return;
}
try {
Class.forName(targetClass);
System.out.println("Found class '" + targetClass + "'");
}
catch (ClassNotFoundException ex){
System.out.println("Failed to find class '" + targetClass + "'");
}
URL u = ClassLoader.getSystemResource(toPath(targetClass));
if (u != null) {
System.out.println("at URL '" + u + "'");
}
}
private static String toPath(String className){
StringBuffer sb = new StringBuffer(className);
for (int i=0; i < sb.length(); i++) {
if (sb.charAt(i) == '.') {
sb.setCharAt(i, '/');
}
}
sb.append(".class");
return sb.toString();
}
private static void printUsage() {
System.out.println("This program reports the location of a class file.");
System.out.println("Usage: java WhichClass classname");
}
}