Class.forName 的作用

/ JavaSE / 511浏览

调用该方法返回一个以字符串指定类名的类的对象。
也就是说,可以使用forName函数,根据类的全路径动态的创建这个类的对象。
用例代码:

package cn.zealon.multiple;

import java.util.Date;

/**
 * class.forName的作用
 * @Author: zealon
 * @Version: 1.0
 */
public class UseClassForName {
    public static void main(String[] args){
        try {
            //使用forName ,按类的全路径名,动态创建Class
            Class<?> date = Class.forName("java.util.Date");
            //通过Class,创建实例对象
            Date dateInstance = (Date) date.newInstance();
            System.out.println(dateInstance.toString());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

输出结果:

Sun Jul 01 20:23:33 CST 2017

有时候,我们程序中所有使用的具体类名在设计时(开发时)无法确定,只有程序运行时才能确定,这时候就需要使用Class.forName去动态加载该类,这个类名通常在配置文件中配置。
例如spring的ioc中每次依赖注入的具体类就是这样配置的。
例如jdbc驱动类名通常也是通过配置文件来配置的,以便在产品交付使用后不用修改源代码就可以更换驱动类名。