Class.forName 和 ClassLoader 都可以用来实现反射。
1 类初始化不同
Class.forName()在类加载的过程中,执行类的静态代码块,实现类的初始化。包括静态变量赋值,静态程序块的执行。
ClassLoader 只是加载类,不会执行类的静态代码块。不会初始化。
2 异常处理
Class.forName()返回 Class 对象,如果类不存在,无法加载,抛出 ClassNotFoundException 异常。
ClassLoader 需要调用 loadClass()方法返回 Class 对象。如果类不存在,同样抛出 ClassNotFoundException 异常。
Class clazz = Class.forName("com.wanmit.Teacher"); Class clz = ClassLoader.getSystemClassLoader().loadClass("com.wanmait.Teacher");
0条评论
点击登录参与评论