Home >Java >javaTutorial >What is the difference between `Class.forName()` and `Class.forName().newInstance()` in Java reflection?
Class.forName() vs Class.forName().newInstance()
When working with Java reflection, two methods often come into play: Class.forName() and Class.forName().newInstance(). To comprehend their distinction, let's use an example:
Demo Class:
package test; public class Demo { public Demo() { System.out.println("Hi!"); } public static void main(String[] args) throws Exception { Class clazz = Class.forName("test.Demo"); Demo demo = (Demo) clazz.newInstance(); } }
Class.forName()
According to its documentation, Class.forName(String) retrieves the Class object associated with the class or interface with the specified name. In our example, this translates to test.Demo.class stored in the clazz variable.
Class.forName().newInstance()
clazz.newInstance() instantiates the class represented by the Class object. Without any arguments, it is equivalent to a new Demo() and returns a new Demo instance.
Output:
Executing this Demo class prints:
Hi!
Dynamic Instantiation
Crucially, newInstance enables the dynamic instantiation of classes at runtime, even if their names are not known beforehand. This fosters code flexibility.
Practical Applications
JDBC drivers leverage this feature to load the appropriate driver at runtime based on the target database. Similarly, EJB and Servlet containers use dynamic loading to initialize components without prior knowledge.
JDBC Driver Initialization
JDBC drivers often employ static initialization blocks to register themselves with the DriverManager during class initialization. This means that Class.forName(String) can seemingly "create" an instance of a JDBC driver, but it's merely a byproduct of the driver's implementation.
JDBC 4.0 Enhancements
With JDBC 4.0 and Java 7, auto-loading has been introduced, making the explicit use of Class.forName() unnecessary in most cases. Developers can refer to the "JDBC 4.0 enhancements in Java SE 6" resource for further details.
The above is the detailed content of What is the difference between `Class.forName()` and `Class.forName().newInstance()` in Java reflection?. For more information, please follow other related articles on the PHP Chinese website!