📄 玩转java的classpath [三].htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0057)http://eps.www85.cn4e.com/java/article/devshow.asp?id=131 -->
<HTML><HEAD><title>csdn_玩转Java的CLASSPATH [三]</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>TD {
FONT-FAMILY: "Verdana", "Arial", "宋体"; FONT-SIZE: 9pt
}
A {
COLOR: #660000; TEXT-DECORATION: underline
}
A:hover {
COLOR: #660000; TEXT-DECORATION: none
}
.line {
LINE-HEIGHT: 14pt
}
</STYLE>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>
<table>
<TBODY>
<TR>
<TD height=21>
<DIV align=center><B><FONT size=3>玩转Java的CLASSPATH [三]
<BR><FONT size=2> </FONT></FONT></FONT>
<HR align=center color=#cccccc noShade SIZE=1>
</DIV></TD></TR>
<TR>
<TD class=line><FONT
color=#333300>玩转Java的CLASSPATH [三]<BR><BR><BR>作者:仙人掌工作室 / eNet技术 <BR><BR>四、JWhich的工作过程 <BR> 要精确地测定classpath中哪一个类先被装载,你必须深入到类装载器的思考方法。事实上,具体实现的时候并没有听起来这么复杂——你只需直接询问类装载器就可以了! <BR><BR>1: public class JWhich { <BR>2: <BR>3: /** <BR>4: * 根据当前的classpath设置, <BR>5: * 显示出包含指定类的类文件所在 <BR>6: * 位置的绝对路径 <BR>7: * <BR>8: * @param className <类的名字> <BR>9: */ <BR>10: public static void which(String className) { <BR>11: <BR>12: if (!className.startsWith("/")) { <BR>13: className = "/" + className; <BR>14: } <BR>15: className = className.replace('.', '/'); <BR>16: className = className + ".class"; <BR>17: <BR>18: java.net.URL classUrl = <BR>19: new JWhich().getClass().getResource(className); <BR>20: <BR>21: if (classUrl != null) { <BR>22: System.out.println("\nClass '" + className + <BR>23: "' found in \n'" + classUrl.getFile() + "'"); <BR>24: } else { <BR>25: System.out.println("\nClass '" + className + <BR>26: "' not found in \n'" + <BR>27: System.getProperty("java.class.path") + "'"); <BR>28: } <BR>29: } <BR>30: <BR>31: public static void main(String args[]) { <BR>32: if (args.length > 0) { <BR>33: JWhich.which(args[0]); <BR>34: } else { <BR>35: System.err.println("Usage: java JWhich <classname>"); <BR>36: } <BR>37: } <BR>38: } <BR><BR> 首先,你必须稍微调整一下类的名字以便类装载器能够接受(12-16行)。在类的名字前面加上一个“/”表示要求类装载器对classpath中的类名字进行逐字精确匹配,而不是尝试隐含地加上调用类的包名字前缀。把所有“.”转换为“/”的目的是,按照类装载器的要求,把类名字格式化成一个合法的URL资源名。 <BR><BR> 接下来,程序向类装载器查询资源,这个资源的名字必须和经过适当格式化的类名字匹配(18-19行)。每一个Class对象维护着一个对装载它的ClassLoader对象的引用,所以这里是向装载JWhich类的类装载器查询。Class.getResource()方法实际上委托装入该类的类装载器,返回一个用于读取类文件资源的URL;或者,当指定的类名字不能在当前的classpath中找到时,Class.getResource()方法返回null。 <BR><BR><BR></FONT></TD></TR>
<TR>
<TD height=5>
<HR align=center color=#cccccc noShade SIZE=1>
</TD></TR></TBODY></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -