Class.forName(String)和loadClass(

2018-05-03  本文已影响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();
        }
        
    }
上一篇下一篇

猜你喜欢

热点阅读