5.1有时间,拜读了台湾的王森老师写的《JAVA深度历险》,在看第二章的时候发现类载入器的一个问题,在JDK1.5的环境下调试和书上的结果不一样。。。
原书的例子如下:
public class Word implements Assembly
{
static
{
System.out.println("Word static initialization");
}
public void start()
{
System.out.println("Word starts");
}
}
import java.net.* ;
public class Office
{
public static void main(String args[]) throws Exception
{
URL u = new URL("file:/d:/my/lib/") ;
URLClassLoader ucl = new URLClassLoader(new URL[]{ u }) ;
Class c = ucl.loadClass(args[0]) ;
Assembly asm = (Assembly) c.newInstance() ;
asm.start() ;
URL u1 = new URL("file:/d:/my/lib/") ;
URLClassLoader ucl1 = new URLClassLoader(new URL[]{ u1 }) ;
Class c1 = ucl1.loadClass(args[0]) ;
Assembly asm1 = (Assembly) c1.newInstance() ;
asm1.start() ;
}
输入命令:java Office Word
原书的结果如下:
Word static initialization
Word starts
Word static initialization
Word1 starts
但是在JDK1.5的结果却是:
Word static initialization
Word starts
word starts
给出的解释:同一个类,被手动创建的URLClassLoader载入两次!
但是在JDK1.5调试的结果却说明载入了一次,第二次调用的方法还是上一次!
不知道这样分析对不对,还请高手指教。。。