在Java中,newInstance()方法是Object类的一个protected方法,用于创建并返回该类的一个新实例。当我们调用一个类的newInstance()方法时,Java会遵循以下类加载机制:
-
如果类已经被加载到JVM中,那么直接返回该类的一个新实例。
-
如果类尚未被加载到JVM中,那么Java会按照以下顺序进行类加载: a. 检查该类是否已经被显式地加载过,例如通过调用Class.forName()方法。如果已经加载过,则直接返回该类的一个新实例。 b. 如果类没有被显式地加载过,Java会尝试从父类加载器(ClassLoader)中加载该类。如果父类加载器无法加载该类,那么当前类加载器会尝试加载该类。 c. 如果父类加载器和当前类加载器都无法加载该类,那么会抛出ClassNotFoundException异常。
-
在类被加载后,Java会创建该类的一个新实例。newInstance()方法会调用类的无参构造函数(default constructor)来创建实例。如果类没有无参构造函数,那么newInstance()方法会抛出InstantiationException异常。
-
最后,newInstance()方法返回该类的一个新实例。
需要注意的是,从Java 9开始,推荐使用Class.getDeclaredConstructor().newInstance()方法来创建类的实例,因为这种方法更加灵活,可以指定构造函数参数,而newInstance()方法只能调用无参构造函数。同时,newInstance()方法已经被标记为过时(deprecated),因为它存在一些安全问题。