网络推荐

推荐给好友 上一篇 | 下一篇

JWhich的工作过程


声明
  • 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任; 2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.
JWhich的工作过程
u| b},Z2Vx  要精确地测定classpath中哪一个类先被装载,你必须深入到类装载器的思考方法。事实上,具体实现的时候并没有听起来这么复杂——你只需直接询问类装载器就可以了!
xhW!B(`/g'Ph
2n*YMSTYZ7DVg+K8W1: public class JWhich {
;wj{3NT5@ cF*o w7O2:
?{%?*}g:z@ \3: /** JAVA中文站社区门户6GX+K1TNH{8S
4: * 根据当前的classpath设置, JAVA中文站社区门户G,fOKs7Vt(J&I
5: * 显示出包含指定类的类文件所在
U1{{!~:jM6L V6: * 位置的绝对路径 JAVA中文站社区门户4^&Z3Zb#{t2C
7: *
9vd,^P/Q'f)f:Z8: * @param className <类的名字>
:b'|'EXLP%KK9: */
8B }4I'U!Jj Qh10: public static void which(String className) { JAVA中文站社区门户8nuFB\z
11: JAVA中文站社区门户j-U(_j F\4i z
12: if (!className.startsWith("/")) { JAVA中文站社区门户,__j$@'iU#O8U o
13: className = "/" + className;
bL$[q2S;T4M4q^14: }
"qHMZ2W"sl15: className = className.replace(´.´, ´/´); JAVA中文站社区门户9T6E(? T`,E"D
16: className = className + ".class";
MPw U|Jl17:
!['G;pgwtV18: java.net.URL classUrl =
/R:T7Np9]\Mqp19: new JWhich().getClass().getResource(className);
qD E%_tka20:
:Oa#qh]'A.BV0W21: if (classUrl != null) { JAVA中文站社区门户[B [-RPY
22: System.out.println("\nClass ´" + className + JAVA中文站社区门户 T;V1cO5`wl
23: "´ found in \n´" + classUrl.getFile() + "´");
E4c!g d6}9[ }*k24: } else {
/G4N k d0b-d25: System.out.println("\nClass ´" + className + JAVA中文站社区门户&ppH$^ T_h\
26: "´ not found in \n´" + JAVA中文站社区门户+XS"KiL9~
27: System.getProperty("java.class.path") + "´");
V| v;TL)?28: } JAVA中文站社区门户j%`|n:]!Y
29: } JAVA中文站社区门户b\z/V'{#{R
30:
+U)NN%NX1A`,s1MC_31: public static void main(String args[]) { JAVA中文站社区门户;X#tl$t!WH4["w.yk
32: if (args.length > 0) {
"i^ O@2Qp@$R0e v33: JWhich.which(args[0]);
4m _Ol\'x aS34: } else { JAVA中文站社区门户y/g,IO#` `!I XL"gj
35: System.err.println("Usage: java JWhich "); JAVA中文站社区门户'm[H.O:dY_R L
36: }
,_M5e ZR+Qp37: }
h8S$@]U/nG38: }
r5re)Bs+XJAVA中文站社区门户BB c;gnBY4n8wp
  首先,你必须稍微调整一下类的名字以便类装载器能够接受(12-16行)。在类的名字前面加上一个“/”表示要求类装载器对classpath中的类名字进行逐字精确匹配,而不是尝试隐含地加上调用类的包名字前缀。把所有“.”转换为“/”的目的是,按照类装载器的要求,把类名字格式化成一个合法的URL资源名。 JAVA中文站社区门户cq-`!J [ F

;D1f)G;nk&l?  接下来,程序向类装载器查询资源,这个资源的名字必须和经过适当格式化的类名字匹配(18-19行)。每一个Class对象维护着一个对装载它的ClassLoader对象的引用,所以这里是向装载JWhich类的类装载器查询。Class.getResource()方法实际上委托装入该类的类装载器,返回一个用于读取类文件资源的URL;或者,当指定的类名字不能在当前的classpath中找到时,Class.getResource()方法返回null  

TAG: JWhich
 

评分:0

我来说两句

seccode