Home  >  Article  >  Java  >  What is the difference between `Class.forName()` and `Class.forName().newInstance()` in Java reflection?

What is the difference between `Class.forName()` and `Class.forName().newInstance()` in Java reflection?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 11:56:01783browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn