class.forName()
public static Class<?> forName(String className) throws ClassNotFoundException
-
返回与带有给定字符串名的类或接口相关联的
Class
对象。 - 调用 forName("X") 将导致命名为 X 的类被初始化。
public T newInstance() throws InstantiationException, IllegalAccessException
-
创建此
Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的
new
表达式实例化该类。如果该类尚未初始化,则初始化这个类。注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。
Constructor.newInstance
方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException
中,从而避免了这一问题。 -
- 返回:
- 此对象所表示的类的一个新分配的实例。
-
newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了我们降耦的手段。
[补充:]newInstance: 弱类型。低效率。只能调用无参构造。new: 强类型。相对高效。能调用任何public构造。