`
YuHuang.Neil
  • 浏览: 182466 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java面试问题之十

阅读更多
分析下面代码的运行结果,并给出具体的原因。

public class ClassB {
        public static void main(String[] args) throws Exception {
                ClassLoader loader=ClassLoader.getSystemClassLoader();
                Class objClass=loader.loadClass("ClassA");
                System.out.println("after load ClassA");
                System.out.println("before init ClassA");
                objClass=Class.forName("ClassA");
        }
}

class ClassA{
        static{
                System.out.println("now init ClassA");
        }
}





问题分析:调用ClassLoader类的loadClass()方法加载一个类,并不是对这个类的主动使用,所以不会对这个类进行初始化工作。上面程序中,先使用系统类加载器加载ClassA,尽管ClassA被加载器加载了,但是Java虚拟机并没有对其进行初始化工作。当程序使用Class类的forName("ClassA")方法显示初始化ClassA时,才是对ClassA的主动使用,这将导致ClassA被初始化,所以它的静态代码段被执行。因此,程序运行的结果应该是:


after load ClassA
before init ClassA
now init ClassA


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics