|
常用链接
留言簿(3)
随笔档案(28)
文章档案(1)
我最爱的网站
搜索
最新评论
阅读排行榜
评论排行榜
Powered by: 博客园
模板提供:沪江博客
|
|
|
|
|
发新文章 |
|
|
java代码:
|
public
interface Assembly{ publicvoid start(); }
publicclass Word implements Assembly{ static{ System.out.println("Word static initialization!"); }
public void start(){ System.out.prinlnt("Word starts"); } }
publicclass Office{ publicstaticvoid main(String args[])throwsException{ Office off = new Office(); System.out.println("类别准备载入"); Class c = Class.forName(arg[0],true,Office.class.getClassLoader()); System.out.println("类别准备实例化"); Object o = c.newInstance(); Object o2= c.newInstance(); } }
当forName方法中的第二参数是true时,显示的是: 类别准备载入 Word static initialization! 类别准备实例化 当forName方法中的第二参数是false时,显示的是: 类别准备载入 类别准备实例化 Word static initialization!
当true的时候是主动使用,当fasle的时候是被动使用. 在P162说:java虚拟机在首次使用类型时初始化它们。只有6种活动被认为是主动使用:创建类的新实例,调用类中声明的静态方法,操作类或者接口中声明的非常量静态字段,调用Java API中特定的反射方法,初始化一个类的子类,以及指定一个类作为Java虚拟机启动时的初始化类。
把 Class c = Class.forName(arg[0],true,Office.class.getClassLoader()); 中的 Office,改成Word,不管forName的第二参数是否是fasle与true,都是 类别准备载入 Word static initialization! 类别准备实例化
|
|
|