Class.forName() vs Class.forName().newInstance()
Lorsque vous travaillez avec la réflexion Java, deux méthodes entrent souvent en jeu jouer : Class.forName() et Class.forName().newInstance(). Pour comprendre leur distinction, utilisons un exemple :
Classe de démonstration :
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()
Selon sa documentation, Class.forName(String) récupère l'objet Class associé à la classe ou à l'interface portant le nom spécifié. Dans notre exemple, cela se traduit par test.Demo.class stocké dans la variable clazz.
Class.forName().newInstance()
clazz.newInstance() instancie la classe représentée par l'objet Class. Sans aucun argument, cela équivaut à un new Demo() et renvoie une nouvelle instance Demo.
Sortie :
L'exécution de cette classe Demo imprime :
Hi!
Instanciation dynamique
Essentiellement, newInstance permet l'instanciation dynamique des classes au moment de l'exécution, même si leurs noms ne sont pas connus au préalable. Cela favorise la flexibilité du code.
Applications pratiques
Les pilotes JDBC exploitent cette fonctionnalité pour charger le pilote approprié au moment de l'exécution en fonction de la base de données cible. De même, les conteneurs EJB et Servlet utilisent le chargement dynamique pour initialiser les composants sans connaissances préalables.
Initialisation du pilote JDBC
Les pilotes JDBC utilisent souvent des blocs d'initialisation statiques pour s'enregistrer auprès du DriverManager. lors de l'initialisation de la classe. Cela signifie que Class.forName(String) peut apparemment « créer » une instance d'un pilote JDBC, mais ce n'est qu'un sous-produit de l'implémentation du pilote.
Améliorations JDBC 4.0
Avec JDBC 4.0 et Java 7, le chargement automatique a été introduit, rendant l'utilisation explicite de Class.forName() inutile dans la plupart des cas. cas. Les développeurs peuvent se référer à la ressource « Améliorations JDBC 4.0 dans Java SE 6 » pour plus de détails.
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!