美文网首页
Class.forName(String)和loadClass(

Class.forName(String)和loadClass(

作者: 四喜汤圆 | 来源:发表于2018-05-03 20:29 被阅读13次

    一、简介

    1.Class.forName(String className)

    Java中获取一个类所对应的Class对象的方法。是Class类的静态方法

    该方法实质上调用的是

    /**
    * name:要加载的Class名字;
    initailize:是否要初始化该类(此处涉及到类的加载过程,加载、连接、初始化)
    classLoader:指定的classLoader
    */
    public static Class<?> forName(String name, boolean initialize,ClassLoader loader)
    

    forName(className,true,classLoader)。true:表示要对加载的类进行初始化操作(静态变量声明时的赋值操作+static初始化块中的代码)

    2.ClassLoader.loadClass(String)

    ClassLoader的实例方法。

    该方法实质上调用的是

    /**
    * name:要加载的类的名称
    * resolve:是否要进行连接
    */
    protected Class<?> loadClass(String name, boolean resolve)
            throws ClassNotFoundException
    

    loadClass(name,false),false表示:不进行连接

    二、总结

    执行完Class.forName(name)方法后可以保证要加载的类完成了初始化,所以若想在加载类时就执行相关的静态代码段,则选择该方法。
    执行完loadClass(name)方法后并不一定保证该类被连接。

    public static void main(String[] args) {
            try {
                //
                Class c1=Class.forName("ClassLoaderTest");
                //
                ClassLoader c2=ClassLoader.getSystemClassLoader();
                c2.loadClass("DeadLoopClass");
                System.out.println("loading DeadLoopClass class!");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            
        }
    

    相关文章

      网友评论

          本文标题:Class.forName(String)和loadClass(

          本文链接:https://www.haomeiwen.com/subject/evblrftx.html