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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-15 06:13:02219parcourir

What is the Key Difference Between `Class.forName()` and `Class.forName().newInstance()` in Java?

Comprendre la distinction entre "Class.forName()" et "Class.forName().newInstance()"

En Java, les deux Class.forName() et Class.forName().newInstance() jouent un rôle crucial dans le chargement dynamique des classes. Cependant, ils servent des objectifs distincts.

Class.forName()

La méthode Class.forName() prend un nom de classe complet sous forme de chaîne et renvoie l'objet Class associé à cette classe. Pour ce faire, il utilise le chargeur de classe pour localiser le fichier de classe et lire son contenu. Class.forName() n'instancie pas la classe. Il donne simplement accès à ses métadonnées et informations.

Class.forName().newInstance()

La méthode Class.forName().newInstance(), quant à elle, crée un nouvelle instance de la classe représentée par l'objet Class renvoyé par Class.forName(). Il le fait en appelant le constructeur par défaut de la classe.

Exemple :

Considérons un exemple pour illustrer la différence :

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();
    }
}

Dans cet exemple :

  • Class clazz = Class.forName("test.Demo") : Cette ligne charge la classe Demo en utilisant Class.forName(). clazz contient désormais l'objet Class pour la classe Demo.
  • Demo demo = (Demo) clazz.newInstance() : Cette ligne crée une nouvelle instance de la classe Demo en utilisant Class.forName().newInstance(). Le casting (Démo) est nécessaire car clazz.newInstance() renvoie un objet.

Différence clé :

La différence clé entre Class.forName() et Class.forName() .newInstance() est que Class.forName() charge uniquement la classe, tandis que Class.forName().newInstance() charge non seulement la classe mais crée également une instance de cette classe.

Utilisation du chargement de classe dynamique Cas :

Class.forName() et Class.forName().newInstance() sont couramment utilisés dans les scénarios où le chargement dynamique de classe est requis. Exemples :

  • Les pilotes JDBC se chargent au moment de l'exécution en fonction des exigences de la base de données.
  • Les conteneurs EJB et Servlet chargent et créent dynamiquement des composants.
  • Plugins ou extensions chargés sur demande.

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