Maison >Java >javaDidacticiel >Quelle est la différence entre « Class.forName() » et « Class.forName().newInstance() » en Java ?

Quelle est la différence entre « Class.forName() » et « Class.forName().newInstance() » en Java ?

DDD
DDDoriginal
2024-11-08 17:34:02595parcourir

What's the difference between

Comprendre la différence entre "Class.forName()" et "Class.forName().newInstance()" : une explication complète

Le langage Java propose plusieurs méthodes pour instancier des classes. Deux méthodes couramment utilisées sont "Class.forName()" et "Class.forName().newInstance()". Bien qu'ils partagent des similitudes, il existe une distinction significative entre leurs fonctionnalités.

Class.forName()

La méthode "Class.forName()" prend une forme pleinement qualifiée nom de classe comme argument et renvoie un objet "Class" représentant cette classe. Cet objet fournit des métadonnées sur la classe, notamment des informations sur ses champs, méthodes et constructeurs. Cependant, il ne crée pas réellement une instance de la classe.

Class.forName().newInstance()

En revanche, "Class.forName(). newInstance()" prend l'objet "Class" renvoyé par "Class.forName()" et tente de créer une nouvelle instance de la classe correspondante en utilisant le constructeur par défaut. En cas de succès, il renvoie une référence à l'objet nouvellement créé. Ici réside la principale différence entre les deux méthodes : "Class.forName()" renvoie uniquement un objet "Class", tandis que "Class.forName().newInstance()" crée une instance réelle.

Exemple :

Considérez le code Java suivant :

package com.example;

public class DemoClass {

    public DemoClass() {
        System.out.println("DemoClass instantiated");
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        // Get the Class object
        Class clazz = Class.forName("com.example.DemoClass");

        // Create an instance
        DemoClass instance = (DemoClass) clazz.newInstance();
    }
}

Lorsque ce code est exécuté, "Class.forName("com.example.DemoClass")" renvoie le " Objet Class" associé à la classe "DemoClass". Ensuite, "clazz.newInstance()" crée une nouvelle instance de la classe "DemoClass", appelant son constructeur par défaut, qui imprime "DemoClass instancié."

Chargement de classe dynamique :

L'un des principaux avantages de "Class.forName()" est sa capacité à charger dynamiquement des classes au moment de l'exécution. Supposons que votre application doive instancier une classe en fonction des entrées ou de la configuration de l'utilisateur. Dans ce cas, vous pouvez utiliser "Class.forName()" pour charger dynamiquement cette classe et créer une instance sans coder en dur le nom de la classe.

Conclusion :

En résumé, la différence entre "Class.forName()" et "Class.forName().newInstance()" réside dans leur objectif. "Class.forName()" renvoie un objet "Class" qui fournit des métadonnées sur la classe. En revanche, "Class.forName().newInstance()" crée une nouvelle instance de la classe en utilisant le constructeur par défaut, similaire à l'opérateur "new" traditionnel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn